Verwenden von TDictionary für Hash-Tabellen in Delphi

Eingeführt in Delphi 2009, die TDictionary-Klasse, Stellt eine generische Hash-Tabellensammlung von Schlüssel-Wert-Paaren dar, die in der Einheit Generics.Collections definiert ist.

Mit den ebenfalls in Delphi 2009 eingeführten generischen Typen können Sie Klassen definieren, die den Typ der Datenelemente nicht speziell definieren.

Ein Wörterbuch ähnelt in gewisser Weise einem Array. In einem Array arbeiten Sie mit einer Reihe (Auflistung) von Werten, die durch einen ganzzahligen Wert indiziert sind. Dies kann ein beliebiger Ordinaltyp sein. Dieser Index hat eine untere und eine obere Schranke.

In einem Wörterbuch können Sie Schlüssel und Werte speichern, die von einem beliebigen Typ sein können.

Der TDictionary-Konstruktor

Daher die Deklaration des TDictionary-Konstruktors:

In Delphi ist das TDictionary als Hash-Tabelle definiert. Hash-Tabellen stellen eine Sammlung von Schlüssel-Wert-Paaren dar, die auf der Grundlage des Hash-Codes des Schlüssels organisiert sind. Hash-Tabellen sind für Lookups (Geschwindigkeit) optimiert. Wenn ein Schlüssel-Wert-Paar zu einer Hash-Tabelle hinzugefügt wird, wird der Hash des Schlüssels berechnet und zusammen mit dem hinzugefügten Paar gespeichert.

TKey und TValue können, da sie generisch sind, von jedem Typ sein. Wenn die Informationen, die Sie im Wörterbuch speichern möchten, beispielsweise aus einer Datenbank stammen, kann Ihr Schlüssel eine GUID (oder ein anderer Wert, der den eindeutigen Index darstellt) sein, während der Wert ein Objekt sein kann, das einer Datenzeile in zugeordnet ist Ihre Datenbanktabellen.

TDictionary verwenden

Der Einfachheit halber werden im folgenden Beispiel Ganzzahlen für TKeys und Zeichen für TValues ​​verwendet. 

Zuerst deklarieren wir unser Wörterbuch, indem wir die Typen von TKey und TValue angeben:

Anschließend wird das Wörterbuch mit der Add-Methode gefüllt. Da ein Wörterbuch nicht zwei Paare mit demselben Schlüsselwert haben kann, können Sie mit der ContainsKey-Methode prüfen, ob sich bereits ein Schlüsselwertpaar im Wörterbuch befindet.

Verwenden Sie die Remove-Methode, um ein Paar aus dem Wörterbuch zu entfernen. Diese Methode verursacht keine Probleme, wenn ein Paar mit einem angegebenen Schlüssel nicht Teil des Wörterbuchs ist.

Um alle Paare durchzugehen, indem Sie die Tasten durchlaufen, können Sie eine for-in-Schleife ausführen.

Verwenden Sie die TryGetValue-Methode, um zu überprüfen, ob ein Schlüssel-Wert-Paar im Wörterbuch enthalten ist.

Das Wörterbuch sortieren

Da ein Wörterbuch eine Hash-Tabelle ist, werden keine Elemente in einer definierten Sortierreihenfolge gespeichert. Nutzen Sie die TList - einen generischen Auflistungstyp, der das Sortieren unterstützt, um die Schlüssel zu durchlaufen, die nach Ihren spezifischen Anforderungen sortiert sind.

Der obige Code sortiert die Schlüssel in aufsteigender und absteigender Reihenfolge und erfasst die Werte so, als wären sie in der sortierten Reihenfolge im Wörterbuch gespeichert. Die absteigende Sortierung von ganzzahligen Schlüsselwerten verwendet TComparer und eine anonyme Methode.