按属性c#对对象列表进行排序
本文关键字:排序 列表 对象 属性 | 更新日期: 2023-09-27 18:27:47
我有这个类:
public class Leg
{
public int Day { get; set; }
public int Hour { get; set; }
public int Min { get; set; }
}
我有一个函数可以得到一个腿的列表,叫做GetLegs()
List<Leg> legs = GetLegs();
现在我想对这个列表进行排序。所以我首先要考虑当天,然后是小时,最后是分钟。我应该如何解决此排序问题?
感谢
也许是这样的:
List<Leg> legs = GetLegs()
.OrderBy(o=>o.Day)
.ThenBy(o=>o.Hour)
.ThenBy(o=>o.Min).ToList();
您可以编写一个自定义IComparer<Leg>
并将其传递给List<T>.Sort
方法。
或者,您可以在类中实现IComparable<Leg>
,并简单地调用List<T>.Sort
。
您需要在类上实现IComparable<T>
接口,以便用C#语言对对象进行更直观的排序。当一个类实现IComparable
时,您还必须实现public method
CompareTo(T).
Leg
类实现了IComparable<Leg>
,这意味着Leg
实例可以与其他Leg
实例进行比较。
#region "Leg Class that implements IComparable interface"
public class Leg:IComparable<Leg>
{
public int Day { get; set; }
public int Hour { get; set; }
public int Min { get; set; }
public int CompareTo(Leg leg)
{
if (this.Day == leg.Day)
{
if (this.Hour == leg.Hour)
{
return this.Min.CompareTo(leg.Min);
}
}
return this.Day.CompareTo(leg.Day);
}
}
#endregion
//Main code
List<Leg> legs = GetLegs();
legs.Sort();
使用Enumerable.OrderBy方法。
我想这会有所帮助。
var o = legs.OrderBy(x => x.Day)
.ThenBy(x => x.Hour)
.ThenBy(x => x.Min);