在 C# 中使用 Comparer 按不同字段对 IEnumerable 进行排序
我有一个对象列表,需要根据对象的三个不同属性进行排序。 示例
CLass Object1{ Property1 , Property2, Property3}
ListObj = IEnumerable<Object1>
Foreach ( item in ListObj){
if (item.Property1 == true)
item goes at top of list
if(item.Property2 == true)
item goes end of list
if(item.Property3 == true)
item can go anywhere.
}
最终列表应该是 Property1 = true 的对象,后跟 Property2 = true 的对象,然后是 Property3 = true 的对象
I have a list of an object which need to be sorted depending on three different properties of the object.
Example
CLass Object1{ Property1 , Property2, Property3}
ListObj = IEnumerable<Object1>
Foreach ( item in ListObj){
if (item.Property1 == true)
item goes at top of list
if(item.Property2 == true)
item goes end of list
if(item.Property3 == true)
item can go anywhere.
}
End list should be objects with Property1 = true followed by objects with Property2 = true followed by objects with Property3 = true
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
为什么不使用 LINQ?
Why not use LINQ?
您自己的标题已经说明了一切:实现自定义
IComparer
并将其传递给 OrderBy 扩展方法:Your own title already says it all: implement a custom
IComparer<Object1>
and pass it to the OrderBy extension method:如果定义此类型,您可以让事情变得更简洁:
它允许您使用 lambda 表达式定义与 LINQ 语句内联的比较。
You can make things neater for yourself if you define this type:
Which lets you define the comparison inline with the LINQ statement using a lambda expression.
这应该提供所需的排序(根据代码,而不是下面的语句)。
This should provide the required sorting (according to the code, not the statement below).
我认为您想要定义一个比较函数,您可以在其中确定列表中任意 2 个项目之间的排名。
返回值指示左侧或右侧对象是否应排名较高,为 -1 或 1(或优先为 0)。只要确保您满足所有条件即可。
那么你可以使用这个,就像
你的列表向后排列一样,我可能翻转了比较函数中的符号。您的排序规则是矛盾的,所以我让您对 Property2 和 Property3 进行排序。
i think you want to define a comparison function where you can determine rank between any 2 items in the list.
the return value indicates if the left or right object should be ranked higher with -1 or 1 (or 0 for preference). just make sure you cover all your conditions.
then you can use this like
if you're list ends up backwards, i probably flipped the signs in the compare function. your rules for sorting are contradictory so i'll let you sort Property2 and Property3.