Ich möchte meine Liste mit der date
Eigenschaft sortieren .
Dies ist meine benutzerdefinierte Klasse:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Test.Web
{
public class cTag
{
public int id { get; set; }
public int regnumber { get; set; }
public string date { get; set; }
}
}
Und das ist das List
, was ich sortieren möchte:
List<cTag> Week = new List<cTag>();
Ich möchte die Liste nach der date
Eigenschaft der cTag-Klasse sortieren. Das Datum hat das Format: dd.MM.yyyy.
Ich habe etwas über die IComparable
Benutzeroberfläche gelesen, weiß aber nicht, wie ich sie verwenden soll.
list.Sort((a,b) => a.date.CompareTo(b.date));
CompareTo
implementiert wird.IComparable
Stipendiaten, dass eine Klasse über die Methode verfügt, aber wie sie diesen Vergleich durchführt, hängt vom Klassenersteller ab. Ich bin mir nicht sicher, wie Date ICompare implementiert, aber ich habe oft gesehen, dass Entwickler die Auftragsparameter verwendet haben, um eine Bindung zu lösen, wenn die Werte gleich sind. hthSie haben Recht, dass Ihre cTag-Klasse eine
IComparable<T>
Schnittstelle implementieren muss . Dann können Sie einfachSort()
auf Ihrer Liste anrufen .Um die
IComparable<T>
Schnittstelle zu implementieren , müssen Sie dieCompareTo(T other)
Methode implementieren . Der einfachste Weg, dies zu tun, besteht darin, die CompareTo-Methode des Feldes aufzurufen, das Sie vergleichen möchten. In Ihrem Fall handelt es sich dabei um das Datum.Dies würde jedoch nicht gut sortieren, da dies die klassische Sortierung nach Zeichenfolgen verwenden würde (da Sie das Datum als Zeichenfolge deklariert haben). Ich denke, der beste Weg wäre, die Klasse neu zu definieren und das Datum nicht als Zeichenfolge, sondern als DateTime zu deklarieren. Der Code würde fast gleich bleiben:
Das einzige, was Sie tun müssen, wenn Sie die Instanz der Klasse erstellen, um Ihre Zeichenfolge mit dem Datum in den DateTime-Typ zu konvertieren. Dies kann jedoch problemlos durchgeführt werden, z
DateTime.Parse(String)
. B. mithilfe einer Methode.quelle
In diesem Fall können Sie auch mit LINQ sortieren:
quelle
quelle
Das Wichtigste zuerst: Wenn die date-Eigenschaft ein Datum speichert, speichern Sie es mit einer DateTime. Wenn Sie das Datum durch die Sortierung analysieren, müssen Sie es für jedes verglichene Element analysieren, das ist nicht sehr effizient ...
Sie können dann einen IComparer erstellen:
Sie können es sogar als Delegierter tun:
quelle
Sie haben Recht - Sie müssen IComparable implementieren. Dazu deklarieren Sie einfach Ihre Klasse:
In CompareTo implementieren Sie einfach Ihren benutzerdefinierten Vergleichsalgorithmus (Sie können dazu DateTime-Objekte verwenden, müssen jedoch zuerst den Typ "obj" überprüfen). Weitere Informationen finden Sie hier und hier .
quelle
IComparable<T>
wäre wahrscheinlich eine bessere Wahl, da es bevorzugt auf Folgendes überprüft wirdIComparable
: msdn.microsoft.com/en-us/library/b0zbh7b6.aspxSie können linq verwenden:
quelle
Schauen Sie sich die überladene Sortiermethode der List-Klasse an. Es gibt einige Möglichkeiten, dies zu tun. Eine davon: Ihre benutzerdefinierte Klasse muss die IComparable-Schnittstelle implementieren, dann können Sie die Sortiermethode der List-Klasse verwenden.
quelle
Vielen Dank für all die schnellen Antworten.
Das ist meine Lösung:
Vielen Dank
quelle
quelle