繁体   English   中英

通过vb.net中的不同对象属性对自定义对象列表进行多次排序

[英]Sort a list of custom objects multiple times by different object properties in vb.net

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

例如,我有:

MyObject.A
MyObject.B
MyObject.C

我想先按属性“ A”的值对列表进行排序,然后按B然后按C进行排序。所有这些属性都是字符串(可能彼此相等,也可能不相等,可能不包含/包含数字字符)。

在浏览完网络后,我发现一种适用于仅需按一个属性(在本示例中为“ 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()

关于您现有方法为何不起作用的原因:这是稳定类型和不稳定类型之间区别 根据MSDN ,Sort()方法不稳定

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM