Verwenden von TDictionary für Hash-Tabellen in Delphi

click fraud protection

Eingeführt in Delphi 2009, die TDictionary-Klasse, definiert in den Generika. Die Sammlungseinheit repräsentiert eine generische Sammlung von Hash-Tabellentypen von Schlüssel-Wert-Paaren.

Generische TypenMit dieser Funktion, die ebenfalls in Delphi 2009 eingeführt wurde, können Sie Klassen definieren, die den Typ der Datenelemente nicht speziell definieren.

Ein Wörterbuch ähnelt in gewisser Weise einem Array. In einem (n Array Sie arbeiten mit einer Reihe (Sammlung) von Werten, die durch einen ganzzahligen Wert indiziert sind. Dies kann ein beliebiger Wert sein Ordnungszahlwert. Dieser Index hat eine Unter- und eine Obergrenze.

In einem Wörterbuch können Sie Schlüssel und Werte speichern, wobei beide 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 basierend auf dem Hash-Code 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.

instagram viewer

Der TKey und der TValue können, da sie Generika sind, von jedem Typ sein. Wenn die Informationen, die Sie im Wörterbuch speichern sollen, beispielsweise aus einer Datenbank stammen, kann Ihr Schlüssel eine GUID sein (oder Ein anderer Wert, der den eindeutigen Indexwert darstellt, während der Wert ein Objekt sein kann, das einer Datenzeile in Ihrer Datenbank zugeordnet ist Tabellen.

Verwenden von TDictionary

Der Einfachheit halber werden im folgenden Beispiel Ganzzahlen für TKeys und Zeichen für TV-Werte verwendet.

Zunächst 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 überprüfen, ob sich bereits ein Schlüsselwertpaar im Wörterbuch befindet.

Verwenden Sie die Methode Entfernen, 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 durch Durchlaufen der Tasten zu durchlaufen, können Sie a für in Schleife.

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 Elemente nicht 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 aufsteigend und absteigend und erfasst die Werte so, als ob sie in der sortierten Reihenfolge im Wörterbuch gespeichert wären. Die absteigende Sortierung von Schlüsselwerten vom Typ Integer verwendet TComparer und eine anonyme Methode.

Wenn Schlüssel und Werte vom Typ TObject sind

Das oben aufgeführte Beispiel ist einfach, da sowohl der Schlüssel als auch der Wert einfache Typen sind. Sie können komplexe Wörterbücher haben, in denen sowohl der Schlüssel als auch der Wert "komplexe" Typen wie Datensätze oder Objekte sind.

Hier ist ein weiteres Beispiel:

Hier wird ein benutzerdefinierter Datensatz für den Schlüssel und ein benutzerdefiniertes Objekt / eine benutzerdefinierte Klasse für den Wert verwendet.

Beachten Sie die Verwendung eines Spezialisten TObjectDictionary Klasse hier. TObjectDictionary kann die Lebensdauer von Objekten automatisch verarbeiten.

Der Schlüsselwert kann nicht Null sein, während der Wertwert dies kann.

Wenn ein TObjectDictionary instanziiert wird, gibt ein Ownerships-Parameter an, ob das Wörterbuch die Schlüssel, Werte oder beides besitzt - und hilft Ihnen daher, keine Speicherlecks zu haben.

instagram story viewer