vb.net - 在 vb.net 中按不同对象属性对自定义对象列表进行多次排序

标签 vb.net list sorting

我想按多个对象属性对自定义对象列表进行排序。

例如,我有:

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”排序。 但是,当我添加更多条目时,它会崩溃,只有最后一个排序是正确的。 似乎每个下一个排序都不会保留不需要排序的条目的原始顺序。

我该如何排序这样的东西?

最佳答案

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 sortAccording to MSDN ,Sort() 方法不稳定

关于vb.net - 在 vb.net 中按不同对象属性对自定义对象列表进行多次排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25144844/

相关文章:

python - 如何获得列中列表的最大值和最小值?

vb.net - 使用 smtp 发送电子邮件,但使用 ZOHO 操作超时

vb.net - Microsoft Office .NET 插件的单元测试

c# - 如何使用 Vb.NET 或 C# 终止进程?

c# - MVVM 嵌套列表滚动

java - 生成部分排序的随机数字列表

c# - 哪个更好地用于处理请求aspx或ashx?

java - 如何在android中从Firebase获取List的值?

c# - LINQ:获取具有两个/多个值中最高值的元素

python - 排序元组 Python