HOWTO · Csharp

Eine Liste in C# alphabetisch sortieren

Dieser Artikel zeigt, wie eine Liste in C# alphabetisch sortiert wird.

Auf dieser Seite

Um eine Liste in C# alphabetisch zu sortieren, rufen Sie Sort() für eine List<T> auf. Bei Zeichenfolgen ordnet die Methode die Werte mithilfe des Standardvergleichers der Liste. Für eine Liste von Objekten geben Sie einen Vergleich an, der die Eigenschaft ausliest, nach der sortiert werden soll. Sort() ordnet die vorhandene Liste neu, sodass Sie anschließend dieselbe Liste ausgeben können.

Eine Liste von Zeichenfolgen alphabetisch sortieren

List<string> verfügt bereits über einen Standardvergleicher. Beim Sortieren von Zeichenfolgen ist daher keine separate Vergleichsfunktion erforderlich. Der Vergleicher richtet sich nach dem Zeichenfolgenvergleich der aktuellen Kultur. Bei gewöhnlichen englischen Wörtern ordnet das folgende Beispiel die Namen alphabetisch. Kulturelle Regeln können die Reihenfolge von Zeichen mit Akzenten oder anderen kulturell relevanten Merkmalen beeinflussen. Verwenden Sie daher einen expliziten Vergleich, wenn Ihre Anwendung eine kulturunabhängige Reihenfolge benötigt.

Führen Sie dieses Beispiel aus:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var words = new List<string> { "Pear", "Apple", "Orange" };
        words.Sort();

        foreach (string word in words)
        {
            Console.WriteLine(word);
        }
    }
}

Die ausgegebenen Namen sind Apple, Orange und Pear, jeweils in einer eigenen Zeile. Der Aufruf sortiert words direkt: Die Variable verweist weiterhin auf dieselbe Liste, nun aber in der neuen Reihenfolge. Das ist nützlich, wenn der nachfolgende Code die sortierte Sequenz verwenden soll. Wenn die ursprüngliche Reihenfolge erhalten bleiben muss, kopieren Sie die Liste, bevor Sie Sort() aufrufen.

Objekte nach einer ausgewählten Eigenschaft sortieren

Wählen Sie für Objekte eine Eigenschaft im Vergleichsdelegaten aus, den Sie an Sort() übergeben. Der Delegat erhält zwei Listenelemente und gibt einen negativen Wert zurück, wenn das erste Element weiter vorne stehen soll, null, wenn ihre Schlüssel gleichwertig sind, oder einen positiven Wert, wenn das erste Element weiter hinten stehen soll. Hier sorgt StringComparison.Ordinal für eine einheitliche ordinale Reihenfolge der Namen anhand von UTF-16-Codeeinheiten, ohne die sprachlichen Regeln der aktuellen Kultur anzuwenden. Soll die Reihenfolge für ein bestimmtes Publikum angezeigt werden, wählen Sie stattdessen einen kulturabhängigen Vergleicher.

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

using System;
using System.Collections.Generic;

class Person
{
    public string Name { get; }

    public Person(string name) => Name = name;
}

class Program
{
    static void Main()
    {
        var people = new List<Person>
        {
            new Person("Maya"),
            new Person("Alex"),
            new Person("Jordan")
        };

        people.Sort((left, right) =>
            string.Compare(left.Name, right.Name, StringComparison.Ordinal));

        foreach (Person person in people)
        {
            Console.WriteLine(person.Name);
        }
    }
}

Beide an den Delegaten übergebenen Werte sind Person-Objekte, verglichen werden jedoch nur ihre Name-Werte. Um einen anderen Objekttyp zu sortieren, ersetzen Sie Name durch die Eigenschaft, die dessen Reihenfolge bestimmt, und verwenden Sie einen passenden Vergleicher für den Typ dieser Eigenschaft. Haben zwei Personen denselben Namen, wertet dieser Vergleich sie als gleich. Fügen Sie nur dann ein zusätzliches Sortierkriterium hinzu, wenn eine zweite Sortierung erforderlich ist. Die Liste bleibt eine List<Person>; ihre Elemente werden neu angeordnet und nicht in eine neue Sammlung kopiert.

Die sortierte Liste ausgeben

Geben Sie die Werte vor und nach dem Sortieren aus, um die Änderung zu sehen. Dieses vollständige Beispiel beginnt mit drei Namen, gibt die ursprüngliche Reihenfolge aus, sortiert dieselbe Liste und gibt anschließend ihre neue Reihenfolge aus. foreach durchläuft jedes Element in der aktuellen Reihenfolge der Liste; die Schleife selbst sortiert nicht. Der Aufruf von Sort() ändert die Reihenfolge.

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var names = new List<string> { "Mina", "Eli", "Noah" };

        Console.WriteLine("Before sorting:");
        foreach (string name in names)
        {
            Console.WriteLine(name);
        }

        names.Sort();

        Console.WriteLine("After sorting:");
        foreach (string name in names)
        {
            Console.WriteLine(name);
        }
    }
}

Die erste Schleife gibt die Einfügereihenfolge aus. Nach names.Sort() durchläuft die zweite Schleife die Liste in der Reihenfolge, die ihr Standardvergleicher für Zeichenfolgen festlegt. Lassen Sie die Aufrufe von Console.WriteLine stehen, wenn Sie das Ergebnis in einer Konsolenanwendung prüfen möchten. In einem anderen Programm kann die sortierte Liste stattdessen direkt an die nächste Operation übergeben werden. Die Beispiele verwenden nur die Importe, Eigenschaften und Einrichtung, die für die beiden Sortierweisen erforderlich sind.