我有这个类:
public class Leg
{
public int Day { get; set; }
public int Hour { get; set; }
public int Min { get; set; }
}
我有一个函数可以获取一系列legs,名为GetLegs()
List<Leg> legs = GetLegs();
现在我想对这个列表进行排序。首先需要考虑日期,然后是小时,最后是分钟。你应该如何解决这个排序问题呢?
谢谢。
或许可以这样实现:
List<Leg> legs = GetLegs()
.OrderBy(o=>o.Day)
.ThenBy(o=>o.Hour)
.ThenBy(o=>o.Min).ToList();
您需要在类上实现 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();
IComparer<Leg>
并将其传递给 List<T>.Sort
方法。IComparable<Leg>
并简单地调用 List<T>.Sort
。List<T>.Sort
中编写一个匿名 lambda。 - Moo-JuiceIComparable<T>
可能是更好的选择。 - Matthias我想这会有所帮助。
var o = legs.OrderBy(x => x.Day)
.ThenBy(x => x.Hour)
.ThenBy(x => x.Min);
DateTime
结构体呢?它支持开箱即用的比较和排序功能。请参阅 http://msdn.microsoft.com/en-us/library/system.datetime(v=vs.110).aspx。 - Călin Darie