12 Stimmen

Wie ArrayList von DateTime Objekte in absteigender Reihenfolge zu sortieren?

Wie sortiere ich ArrayList von DateTime Objekte in absteigender Reihenfolge?

Ich danke Ihnen.

34voto

Guffa Punkte 663241

Zunächst einmal sollten Sie, sofern Sie nicht auf Framework 1.1 angewiesen sind, keine ArrayList überhaupt nicht. Sie sollten eine stark typisierte generische List<DateTime> stattdessen.

Für die benutzerdefinierte Sortierung gibt es eine Überladung der Sort Methode, die einen Komparator benötigt. Durch Umkehrung des regulären Vergleichs erhalten Sie eine Sortierung in absteigender Reihenfolge:

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

Aktualisierung:

Mit Lambda-Ausdrücken in C# 3 ist der Delegat einfacher zu erstellen:

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

16voto

Marc Gravell Punkte 970173

Wie "Guffa" bereits gesagt hat, sollten Sie nicht mit ArrayList es sei denn, Sie arbeiten mit .NET 1.1; hier ist eine einfachere List<DateTime> Beispiel:

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

Ihre Daten sind nun in absteigender Reihenfolge sortiert.

3voto

j0tt Punkte 1088

Verwenden Sie einen DateTime Comparer, der in umgekehrter Reihenfolge sortiert. Sortieren aufrufen.

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

list.Sort(new ReverseDateComparer());

0 Stimmen

...und mäßig effizienter (vermeidet das Multiplizieren pro Vergleich).

2voto

nightcoder Punkte 12649

Wenn Sie .NET 3.5 verwenden:

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

0 Stimmen

Von ArrayList bräuchte man auch ein Cast<DateTime>() dort drin.

0voto

abatishchev Punkte 94886
List<T>.Sort(YourDateTimeComparer) where YourDateTimeComparer : IComparer<DateTime>

Hier ist ein Beispiel für die Verwendung des IComparers: Wie entfernt man Duplikate aus int[][]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X