【发布时间】:2009-05-09 22:56:30
【问题描述】:
如何按降序对 DateTime 对象的 ArrayList 进行排序?
谢谢。
【问题讨论】:
标签: c#
如何按降序对 DateTime 对象的 ArrayList 进行排序?
谢谢。
【问题讨论】:
标签: c#
首先,除非您坚持使用框架 1.1,否则您根本不应该使用 ArrayList。您应该改用强类型泛型 List<DateTime>。
对于自定义排序,Sort 方法的重载需要一个比较器。通过反转常规比较,您可以获得降序排序:
list.Sort(delegate(DateTime x, DateTime y){ return y.CompareTo(x); });
使用 C# 3 中的 lambda 表达式,委托更容易创建:
list.Sort((x, y) => y.CompareTo(x));
【讨论】:
正如“Guffa”已经说过的那样,除非您在 .NET 1.1 中,否则您不应该使用 ArrayList;不过,这是一个更简单的 List<DateTime> 示例:
List<DateTime> dates = ... // init and fill
dates.Sort();
dates.Reverse();
您的日期现在按降序排列。
【讨论】:
使用反向排序的日期时间比较器。调用排序。
public class ReverseDateComparer:IComparer{
public int Compare(object x, object y){
return -1 * DateTime.Compare(x, y);
}
}
list.Sort(new ReverseDateComparer());
【讨论】:
如果您使用的是 .NET 3.5:
// ArrayList dates = ...
var sortedDates = dates.OrderByDescending(x => x);
// test it
foreach(DateTime dateTime in sortedDates)
Console.WriteLine(dateTime);
【讨论】:
List<T>.Sort(YourDateTimeComparer) where YourDateTimeComparer : IComparer<DateTime>
这是自定义 IComparer 使用的示例:How to remove duplicates from int[][]
【讨论】: