【问题标题】:How to sort ArrayList of DateTime objects in descending order?如何按降序对 DateTime 对象的 ArrayList 进行排序?
【发布时间】:2009-05-09 22:56:30
【问题描述】:

如何按降序对 DateTime 对象的 ArrayList 进行排序?

谢谢。

【问题讨论】:

    标签: c#


    【解决方案1】:

    首先,除非您坚持使用框架 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));
    

    【讨论】:

      【解决方案2】:

      正如“Guffa”已经说过的那样,除非您在 .NET 1.1 中,否则您不应该使用 ArrayList;不过,这是一个更简单的 List<DateTime> 示例:

      List<DateTime> dates = ... // init and fill
      dates.Sort();
      dates.Reverse();
      

      您的日期现在按降序排列。

      【讨论】:

        【解决方案3】:

        使用反向排序的日期时间比较器。调用排序。

        public class ReverseDateComparer:IComparer{ 
            public int  Compare(object x, object y){
                return -1 * DateTime.Compare(x, y);
            }
        }
        
        list.Sort(new ReverseDateComparer());
        

        【讨论】:

        • ...并且效率适中(避免每次比较相乘)。
        【解决方案4】:

        如果您使用的是 .NET 3.5:

        // ArrayList dates = ...
        var sortedDates = dates.OrderByDescending(x => x);
        // test it
        foreach(DateTime dateTime in sortedDates)
          Console.WriteLine(dateTime);

        【讨论】:

        • 从 ArrayList 你也需要一个 Cast() 。
        【解决方案5】:
        List<T>.Sort(YourDateTimeComparer) where YourDateTimeComparer : IComparer<DateTime>
        

        这是自定义 IComparer 使用的示例:How to remove duplicates from int[][]

        【讨论】:

          猜你喜欢
          • 2011-08-19
          • 1970-01-01
          • 2011-08-12
          • 1970-01-01
          • 2016-09-05
          • 1970-01-01
          • 1970-01-01
          • 2013-01-06
          • 2015-12-27
          相关资源
          最近更新 更多