Wie CompareTo-Methode arbeitet der Logik in der Liste Sortieren-Funktion?
Wie CompareTo-Methode arbeitet der Logik in der Liste Sortieren-Funktion.
public class person : IComparable
{
string firstName;
string lastName;
public int CompareTo(object obj)
{
person otherPerson = (person)obj;
if (this.lastName != otherPerson.lastName)
return this.lastName.CompareTo(otherPerson.lastName);
else
return this.firstName.CompareTo(otherPerson.firstName);
}
public person(string _firstName, string _lastName)
{
firstName = _firstName;
lastName = _lastName;
}
override public string ToString()
{
return firstName + " " + lastName;
}
}
List<person> l = new List<person>();
l.Add(new person("Mark", "Hanson"));
l.Add(new person("Kim", "Akers"));
l.Add(new person("Zsolt", "Ambrus"));
l.Sort();
foreach (person p in l)
Console.WriteLine(p.ToString());
InformationsquelleAutor Novice Developer | 2010-10-15
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beim aufrufen des Sort-Methode auf eine generische Liste (Liste in deinem Fall), hinter den kulissen, die Umsetzung der Sortierung überprüfen, ob die Art der Liste (die
person
Klasse) implementiert die IComparable - Schnittstelle, und wenn es tut, wird aufrufen die CompareTo Mitglied zu führen Vergleiche zwischen den Elementen der Liste ausführen Sortieren. Die Tatsache, dass dieperson
Klasse implementiert IComparable wird interpretiert als ein "Vertrag", der angibt, dass dieperson
Klasse wird eine Methode namens CompareTo.Die Umsetzung des Sortieren können, verwenden Sie eine snippet-wie die folgenden zu vergleichen, um Elemente der Liste:
Die CompareTo-Methode vergleicht immer das Objekt aufgerufen wird, auf die parameter und die Bedeutung der return-Wert ist immer der gleiche:
Intern, die Sort-Methode verwendet eine optimierte QuickSort, um tatsächlich die Art aber, um es einfacher zu Folgen, hier ein Beispiel der Umsetzung bubble-sort, die zeigt, was passiert hinter den kulissen im Sinne der Berufung auf die IComparable-Schnittstelle:
List<T>.Sort
wird dokumentiert, wie die Verwendung eines instabilen QuickSort: Siehe die Bemerkungen im Abschnitt msdn.microsoft.com/en-us/library/w56d4y5z.aspxSortiert nach Nachnamen, dann Vornamen.
Wenn zwei Menschen haben den gleichen Nachnamen, die
if
- Anweisung wird am Ende verglichen mit dem Vornamen an.Ansonsten wird es bei vergleichen von Nachname.