Как отсортировать ArrayList объектов DateTime в порядке убывания?

Как отсортировать объекты ArrayList из DateTime в порядке убывания?

Спасибо.

Ответ 1

Прежде всего, если вы не застряли в использовании фреймворка 1.1, вы не должны использовать ArrayList вообще. Вместо этого вы должны использовать типизированный типичный List<DateTime>.

Для пользовательской сортировки существует перегрузка метода Sort, который принимает сопоставитель. Поменяв регулярное сравнение, вы получаете сортировку в порядке убывания:

list.Sort(delegate(DateTime x, DateTime y){ return y.CompareTo(x); });

Обновление:

С лямбда-выражениями в С# 3 делегат легче создать:

list.Sort((x, y) => y.CompareTo(x));

Ответ 2

Как уже говорилось, "Guffa" не следует использовать ArrayList, если вы не в .NET 1.1; здесь более простой пример List<DateTime>, хотя:

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

Ваши даты сортируются в порядке убывания.

Ответ 3

Используйте сопоставление DateTime Comparer, которое сортируется в обратном порядке. Вызов Сортировка.

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);