21 Gäste und 0 Benutzer online | Anmelden | Registrieren
Startseite Windows-Artikel Problemlösungen Einstellungen Anleitungen Hardware FAQ C#.NET Forum Gästebuch Programme Onlinetools Downloads Suche Links Impressum Kontakt Anmelden |
Zu den C#.NET-Artikeln Sortieren von Listen - C# Am 09.10.2007 verfasst von Andreas Nägeli. Hits: 1684 Die Liste ist ein sehr wichtiger Datentyp zum kurzfristigen Speichern von Daten. Wenn man anhand einer Liste etwas ausgeben will, möchte man die Daten vorher eventuell sortieren. Doch dies stellt uns vor ein Problem: es kann eine Liste von jedem beliebigen Typ erstellt werden. Woher weiß die Liste, wie ein bestimmter Datentyp sortiert werden soll? Die Lösung ist recht simpel. Es reicht, wenn ein Objekt an sich weiß, wann es "größer" oder "kleiner" wie ein anderes Objekt des gleichen Typs ist. Diese Eigenschaft wird mit dem Interface IComparable implementiert. Es fordert eine Methode mit der Signatur int CompareTo(Object). Diese Methode wird von der Sortierroutine der Liste aufgerufen, wenn die Liste geordnet werden soll. Gibt die Methode einen Wert kleiner 0 zurück, so ist das übergebene Objekt größer als das Objekt selbst. Genau 0 bedeutet Gleichheit, größer 0 bedeutet, dass das aufgerufene Objekt größer als die übergebene Instanz ist. Das Ganze anhand einer Beispielklasse:
Über den Konstruktor werden die Datenvariablen gesetzt, die über die get-Methoden wieder abgerufen werden können. Die Methode CompareTo prüft zunächst, ob das übergebene Objekt vom Typ Person ist. Wenn ja, so wird die Differenz zwischen dem eigenen Alter und dem Alter der übergebenen Person zurückgegegeben. Ist die eigene Person älter, so wird ein Wert größer 0 zurückgegegeben. Sind sie gleich alt, kommt eine 0 bei der Rechnung heraus. War die übergebene Variable nicht vom Typ Person, so geben wir eine 0 zurück, um uns in diesem Falle neutral zu verhalten. Diese Klasse kann jetzt mit einem Beispielprogramm getestet werden.
Zunächst erstellen wir eine neue Liste und füllen diese mit zwei Einträgen. Unsere Logik sollte die Datenstruktur aufsteigend nach Alter sortieren, so dass die Ausgabe nach list.Sort() mit "Mustermann" beginnen muss. Diese Möglichkeit der Sortierung ist sehr einfach zu implementieren, da keine eigene Sortierungsroutine geschrieben werden muss. Die Vorgehensweise mit CompareTo macht nur Sinn, wenn die Objekte nur nach einem Kriterium sortiert werden müssen. Soll die Liste nach unterschiedlichen Gesichtspunkten sortiert werden (z.B. erst nach Alter, später dann nach Vorname), so muss mit IComparer gearbeitet werden. Kommentiertes Codebeispiel herunterladen (CLSort.rar, 15 KB, VS80) Bewertung dieses Artikels von 6 Benutzern: - 5.83 / 10 Punkte |
|
||
2002 - 2008 Computerleben.net Sitemap |