Edg*_*ins 2 vb.net sorting list
我想按多个对象属性对自定义对象列表进行排序.
例如,我有:
MyObject.A
MyObject.B
MyObject.C
Run Code Online (Sandbox Code Playgroud)
我想首先按属性"A"的值,然后按B然后按C对列表进行排序.所有这些属性都是字符串(可能相互匹配也可能不相同,可能包含也可能不包含/包含数字字符).
在通过网络挖掘后,我发现了一些适用于我只需要按一个属性对列表进行排序的情况(在本例中为"A"):
MyList.Sort(Function(x, y) x.A.CompareTo(y.A))
Run Code Online (Sandbox Code Playgroud)
这工作得很好.
所以在那之后,我想我只需要按照正确的顺序做更多种类,我尝试做这样的事情:
MyList.Sort(Function(x, y) x.C.CompareTo(y.C))
MyList.Sort(Function(x, y) x.B.CompareTo(y.B))
MyList.Sort(Function(x, y) x.A.CompareTo(y.A))
Run Code Online (Sandbox Code Playgroud)
哪种有时有效,有时则无效.如果列表条目很少(<10),则工作正常,例如,如果"A"值相等,则列表按"B"值排序,如果相等,则按"C"排序.但是,当我添加更多条目时,它会崩溃,只有最后一种排序是正确的.似乎每个下一个排序都不保留它不需要排序的条目的原始顺序.
我该如何排序?
MyList = (MyList.OrderBy(Function(i) i.A).
ThenBy(Function(i) i.B).
ThenBy(Function(i) i.C)).ToList()
Run Code Online (Sandbox Code Playgroud)
至于为什么你现有的方法不起作用:这是稳定和不稳定排序之间的区别.根据MSDN,Sort()方法不稳定.