我想按多个对象属性对自定义对象列表进行排序。
例如,我有:
MyObject.A
MyObject.B
MyObject.C
我想首先按属性“A”的值,然后按B然后按C对列表进行排序。所有这些属性都是字符串(可能相同也可能不相同,可能包含也可能不包含/包含数字字符)。
在浏览网页后,我发现something适用于我只需要按一个属性对列表进行排序的情况(在此示例中为“A”):
MyList.Sort(Function(x, y) x.A.CompareTo(y.A))
这很好。
所以在那之后,我想我只需要按照正确的顺序做更多种类,我尝试做这样的事情:
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))
哪种有时有效,有时无效。如果列表条目很少(< 10),则它工作正常,例如,如果“A”值相等,则列表按“B”值排序,如果它们相等,则按“C”排序。 但是,当我添加更多条目时,它会崩溃,只有最后一种排序是正确的。 似乎每个下一个排序都不保留它不需要排序的条目的原始顺序。
我该如何排序?
答案 0 :(得分:5)
MyList = (MyList.OrderBy(Function(i) i.A).
ThenBy(Function(i) i.B).
ThenBy(Function(i) i.C)).ToList()
至于为什么你现有的方法不起作用:那就是difference between a stable and an unstable sort。 According to MSDN,Sort()方法不稳定。