Sup*_*234 225 .net c# collections
假设我在列表中有3个字符串(例如"1","2","3").
然后我想重新排序它们将"2"放在位置1(例如"2","1","3").
我正在使用此代码(将indexToMoveTo设置为1):
listInstance.Remove(itemToMove);
listInstance.Insert(indexToMoveTo, itemToMove);
Run Code Online (Sandbox Code Playgroud)
这似乎有效,但我偶尔会得到奇怪的结果; 有时订单不正确或列表中的项目被删除!
有任何想法吗?并List<T>保证订单?
Bev*_*van 292
本List<>类不保证排序-事情会在你添加它们,包括重复,除非你明确地对列表进行排序的顺序列表中保留.
根据MSDN:
... List"表示可以通过索引访问的强类型对象列表."
索引值必须保持可靠,以确保准确.因此订单得到保证.
如果您稍后在列表中移动项目,则可能会从代码中获得奇怪的结果,因为您Remove()将在调用之前将所有其他项目移动到一个位置Insert().
你可以将你的代码煮到足够小的东西发布吗?
Joe*_*win 34
这里有4个项目及其索引
0 1 2 3
K C A E
Run Code Online (Sandbox Code Playgroud)
您希望将K移动到A和E之间 - 您可能会认为位置3.您在此处注意索引,因为在删除之后,所有索引都会更新.
所以你先删除第0项,然后离开
0 1 2
C A E
Run Code Online (Sandbox Code Playgroud)
然后你插入3
0 1 2 3
C A E K
Run Code Online (Sandbox Code Playgroud)
要获得正确的结果,您应该使用索引2.为了使事情保持一致,您需要发送到(indexToMoveTo-1)if indexToMoveTo > indexToMove,例如
bool moveUp = (listInstance.IndexOf(itemToMoveTo) > indexToMove);
listInstance.Remove(itemToMove);
listInstance.Insert(indexToMoveTo, moveUp ? (itemToMoveTo - 1) : itemToMoveTo);
Run Code Online (Sandbox Code Playgroud)
这可能与您的问题有关.请注意我的代码未经测试!
编辑:或者,您可以Sort使用自定义比较器(IComparer),如果这适用于您的情况.
| 归档时间: |
|
| 查看次数: |
105878 次 |
| 最近记录: |