如何处理排序“字符串”?
假设我得到了一个包含项目的排序列表,每个项目都可以在此列表中上下排序。首先想到的是有一个int的SortOrder(例如1-10)。这样做的问题是,在排序时,我总是必须更新至少2个项目(项目3代替项目4,从而切换排序值)。如果我在位置3放置一个新物品,所有物品> 3将不得不在那里改变sortOrder。如何处理排序“字符串”?
因此,为了避免这种情况,我可以使用更大的intervalls例如:
N1 : 10 000
N2 : 20 000
N3 : 30 000
N4 : 40 000
N5 : 50 000
如果N4将被排序了它看起来像这样的水平:
N1 : 10 000
N2 : 20 000
N4 : 25 000
N3 : 30 000
N5 : 50 000
我的问题是如何处理这是C#中的最佳方式?我应该使用哪种数据类型?我如何避免重新生成整个列表(当不能再进行排序)?
我自己的想法是将它存储为代码和数据库中的十进制数。
我使用的方法是使用int数据类型的专用DisplayOrder列;我确实(通常)索引列,但没有唯一的索引。这样通过更新值来交换两个项目并不是太痛苦。通常(并且默认情况下)我不需要通过用户界面使值可见,所以实际的值从来都不重要。如果具有唯一值是很重要的,那么这也可以起作用 - 我有一个proc,在需要时运行'重新定位'从1开始的顺序值。
为什么你需要在代码中的“排序顺序”字段?
如果您在列表或其他容器中有内存中的项目,则项目顺序是排序顺序。
您只需要在将数据保存到数据库或其他数据库时指定一个数值。然后,当您检索要重新填充内存数据的项目时,请按照排序顺序获取它们并将其添加到列表中。
此方法允许对项目进行任何重新排序,并且还可以删除项目,而不必维护排序顺序值,直到您保存数据为止。
问题是,所做的任何sororder更改都必须保存到databse。所以我试图做尽可能少的更新。 – Banshee 2015-02-10 14:25:50
这看起来像一个建议的解决方案,而不是一个问题。你能解释一下你想解决的问题吗?我不认为使用int或小数或其他来排序是一件坏事;只是这个问题没有解释为什么*你会插入一个新的项目或改变现有项目的排序顺序。如果你解释说我认为你会有更好的答案。 – 2015-02-10 13:34:01
更新/交换两个号码有什么问题? – DavidG 2015-02-10 13:34:09
我尽量做出尽可能少的更新,这包括往数据库的往返以及GUI更新。 – Banshee 2015-02-10 14:23:43