Sortieren Sie ein Wörterbuch nach seinen Schlüsseln in C#

Syed Hassan Sabeeh Kazmi 12 Oktober 2023
  1. Verwenden Sie die LINQ-Methode OrderBy(), um ein Wörterbuch nach seinen Schlüsseln in C# zu sortieren
  2. Verwenden Sie die Klasse SortedList<TKey, TValue>, um ein Wörterbuch nach seinen Schlüsseln in C# zu sortieren
  3. Verwenden Sie die Klasse SortedDictionary<TKey, TValue>, um ein Wörterbuch nach seinen Schlüsseln in C# zu sortieren
Sortieren Sie ein Wörterbuch nach seinen Schlüsseln in C#

In C# ermöglicht ein Wörterbuch nahezu konstante Zeitabfragen, die seine Implementierung als Hash-Tabelle widerspiegeln, was bedeutet, dass es auch von Natur aus unsortiert ist. Sie können die Elemente eines Wörterbuchs separat abrufen, um sie zu sortieren, da ein Wörterbuch keine vordefinierte Sortiermethode hat.

Die erste Methode ist die Verwendung der LINQ-Methode OrderBy(); allerdings hat es nicht die beste Performance O(n*log(n)), da es alle Einträge sortieren muss. Wenn Sie wiederholt auf die Wörterbuchelemente per Schlüssel zugreifen müssen, verwenden Sie SortedList oder SortedDictionary, da diese Ihnen helfen können, diesen Zweck ohne Qualitätseinbußen zu erreichen.

Beim Extrahieren der Liste der Elemente in der Reihenfolge in linearer Zeit O(n) kann etwas Leistung bei Such- und Einfügezeiten verloren gehen. In diesem Tutorial lernen Sie drei mögliche Methoden kennen, um ein Wörterbuch nach seinen Schlüsseln in C# zu sortieren.

Verwenden Sie die LINQ-Methode OrderBy(), um ein Wörterbuch nach seinen Schlüsseln in C# zu sortieren

Diese LINQ-Methode ermöglicht es Programmierern, ein IOrderedEnumerable von KeyValueParts aus einem Wörterbuch zu extrahieren, um es nach seinen Schlüsseln zu sortieren. Da ein Wörterbuch Elemente nicht der Reihe nach speichern kann, ist die Sortierung eines Wörterbuchs O(n*log(n)).

LINQ-Methoden gehören zum Namensraum System.Linq und können es Ihnen ermöglichen, jedes Schlüssel-Wert-Paar für jeden Schlüssel im sortierten Wörterbuch einfach zu verarbeiten. Die Methode OrderBy wird durch verzögerte Ausführung implementiert und gibt sofort ein Objekt zurück, das alle Informationen speichert, die zum Sortieren eines Wörterbuchs erforderlich sind.

Es führt eine stabile Sortierung durch, und wenn die Schlüssel zweier Elemente gleich sind, wird die Reihenfolge der Elemente beibehalten.

Beispielcode:

using System;
using System.Linq;
using System.Collections.Generic;

public class sortOrderBy {
  public static void Main(string[] args) {
    var metal = new Dictionary<string, int> {
      ["Platinum"] = 7,
      ["Aluminum"] = 4,
      ["Titanium"] = 3,
    };

    foreach (var console in metal.OrderBy(x => x.Key)) {
      Console.WriteLine(console);
    }
  }
}

Ausgang:

[Aluminum, 4]
[Platinum, 7]
[Titanium, 3]

Eine alternative LINQ-Methode zu OrderBy ist OrderByDesending, die das tut, was der Name schon sagt – sie kehrt die Reihenfolge um. Da es sich um eine Art IOrderedEnumerable<TElement> handelt, können Sie mit den Methoden ThenBy und ThenByDescending auch zusätzliche Sortierkriterien angeben, um ein Wörterbuch zu sortieren.

Darüber hinaus ist die LINQ-Methode Reverse ein Äquivalent zur Methode OrderByDescending, um ein Wörterbuch in absteigender Reihenfolge zu sortieren.

Beispielcode:

using System;
using System.Linq;
using System.Collections.Generic;

public class sortOrderByDescending {
  public static void Main(string[] args) {
    var metal = new Dictionary<string, int> {
      ["Platinum"] = 7,
      ["Aluminum"] = 4,
      ["Titanium"] = 3,
    };

    // LINQ `Reverse` method, which gives the similar output
    /*
    foreach (var item in fruit.Reverse())
    {
        Console.WriteLine(console);
    }
    */

    foreach (var console in metal.OrderByDescending(x => x.Key)) {
      Console.WriteLine(console);
    }
  }
}

Ausgang:

[Titanium, 3]
[Platinum, 7]
[Aluminum, 4]

Verwenden Sie die Klasse SortedList<TKey, TValue>, um ein Wörterbuch nach seinen Schlüsseln in C# zu sortieren

Sein Name kann für einige irreführend sein, da diese Methode oder Datenstruktur Schlüssel auf ihre Werte abbildet und ähnlich wie ein Wörterbuch wirken kann. Es verwendet einen binären Suchansatz, um Werte nach Schlüsseln zu finden und sie in einer bestimmten Reihenfolge zu speichern, um ein Wörterbuch zu sortieren.

Sie können die Methode SortedList<TKey, TValue> verwenden, um ein Wörterbuch auf konfigurierbare Weise nach Schlüsseln zu sortieren, falls Sie einen IEqualityComparer<T> an den Konstruktor übergeben. Intern wird es effektiv mit einer Liste implementiert, sodass es eine binäre Suche durchführt, anstatt nach Hash-Code zu suchen.

Nützlich bedeutet nicht, dass es leistungsoptimiert ist, da es eine große Liste erstellen kann, aber Komplexität vermeiden kann. Er gehört zum Namensraum System.Collections.Generic und basiert auf der zugehörigen IComparer<T>-Implementierung.

Beispielcode:

using System;
using System.Collections.Generic;

public class sortedListExp {
  public static void Main(string[] args) {
    var metal = new SortedList<string, int> {
      ["Platinum"] = 7,
      ["Aluminum"] = 4,
      ["Titanium"] = 3,
    };

    foreach (var console in metal) {
      Console.WriteLine(console);
    }
  }
}

Ausgang:

[Aluminum, 4]
[Platinum, 7]
[Titanium, 3]

Verwenden Sie die Klasse SortedDictionary<TKey, TValue>, um ein Wörterbuch nach seinen Schlüsseln in C# zu sortieren

Es stellt ein Wörterbuch dar, in dem Schlüssel-Wert-Paare nach dem Schlüssel sortiert werden, da es als binäre Suchstruktur mit einer logarithmischen Zeitabrufoperation implementiert ist. Es initialisiert eine neue Instanz eines Wörterbuchs (das dieselbe Zuordnung wie das angegebene Wörterbuch enthält) und sortiert es nach seinen Schlüsseln.

Es gehört zu einer generischen Klasse, einem binären Suchbaum mit O(log n)-Abruf, wobei n die Anzahl der Elemente im Wörterbuch darstellt. Es ist ähnlich wie SortedList<TKey, TValue>, hat aber schnellere Einfüge- und Entfernungsvorgänge für unsortierte Daten.

Da es als Rot-Schwarz-Baum implementiert ist, während ein Wörterbuch als Hash-Tabelle implementiert ist, kann die Verwendung von SortedDictionary die Leistung negativ beeinflussen. Wenn es jedoch keinen signifikanten Leistungsunterschied gibt, kann die Verwendung von SortedDictionary weniger Verwirrung stiften.

Beispielcode:

using System;
using System.Collections.Generic;

public class sortedDictionaryExp {
  public static void Main(string[] args) {
    var metal = new SortedDictionary<string, int> {
      ["Platinum"] = 7,
      ["Aluminum"] = 4,
      ["Titanium"] = 3,
    };

    foreach (var console in metal) {
      Console.WriteLine(console);
    }
  }
}

Ausgang:

[Aluminum, 4]
[Platinum, 7]
[Titanium, 3]

Dieses Tutorial enthält alles, um zu besprechen, wie ein Wörterbuch nach seinen Schlüsseln sortiert wird, und es könnte eventuelle Verwirrungen in Bezug auf dieses Thema beseitigen. Darüber hinaus sind Sie möglicherweise auf einige neue Methoden oder Datenstrukturen aufmerksam geworden, um diese Aufgabe zu erfüllen und gleichzeitig die ultimative Leistung beizubehalten.

Syed Hassan Sabeeh Kazmi avatar Syed Hassan Sabeeh Kazmi avatar

Hassan is a Software Engineer with a well-developed set of programming skills. He uses his knowledge and writing capabilities to produce interesting-to-read technical articles.

GitHub

Verwandter Artikel - Csharp Dictionary