Tru*_*der 2 c# linq-to-objects compare object
如何使用两个属性按升序排序,另一个按升序排序,从而对列表中的两个对象进行排序.当使用linq时,它表示我需要实现IComparer接口,但不确定如何通过一次使用两个属性来比较两个对象.
按名称升序和年龄降序说人员类.
Jon*_*eet 12
那么,你需要决定哪个是你的主要比较.如果第一个比较给出相等,则仅使用二次比较.例如:
public int Compare(Person p1, Person p2)
{
int primary = p1.Name.CompareTo(p2.Name);
if (primary != 0)
{
return primary;
}
// Note reverse order of comparison to get descending
return p2.Age.CompareTo(p1.Age);
}
Run Code Online (Sandbox Code Playgroud)
(这可以通过各种方式更紧凑地编写,但我保持非常明确,因此您可以理解这些概念.)
请注意,在MiscUtil中我有一些构建块,因此您可以使用lambda表达式轻松构造比较器,组合比较器等.
如果要创建列表的新副本(因此原始列表中仍保留原始顺序),可以执行以下操作:
List<Person> unsortedList;
sortedList = unsortedList.OrderBy(p => p.Name).ThenByDescending(p => p.Age);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2675 次 |
| 最近记录: |