Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Library: Sonstiges (https://www.delphipraxis.net/45-library-sonstiges/)
-   -   Delphi Hash-Tabellen (https://www.delphipraxis.net/45571-hash-tabellen.html)

alzaimar 8. Mai 2005 17:58


Hash-Tabellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hash-Tabellen, oder 'Dictionaries', Wörterbücher etc. sind sehr nützliche Hilfsmittel, für die Delphi leider keine brauchbare Klasse bereitstellt. Zwar erfüllt die TStringList-Klasse mit ihrem String/Objekt Tupel die Grundvoraussetzungen, aber schnell ist das nicht.

Also, bastelt man sich eben eine Klasse. Hier sind es Zwei. Sie unterscheiden sich im Datentyp für den Schlüssel.
TStringDictionary implementiert eine Dictionary mit einem String als Schlüssel (und einem Pointer als zu speicherndem Datum).
TIntegerDictionary macht das Gleiche, aber mit einem Int64 als Schlüssel.

Das schöne an den Klassen ist, das sie sich automatisch vergrößern, wenn die Liste zu mehr als ca. 65% gefüllt ist.

Add (Key, Data) fügt ein Element in das Dictionary ein, das mit Find(Key, Data) wieder gefunden werden kann. Mit Delete (Key) löscht man den Eintrag, wenn man nur die Daten hat, tut es DeleteData (Data) auch, wobei das natürlich länger dauert.
Die Klasse unterstützt das Durchiterieren (allerdings unsortiert). Mit First springt man zum ersten Datensatz, über die Funktion Next (Key, Data) bekommt man den jeweils nächsten Eintrag, bis die Funktion False liefert. TotalCount liefert die Anzahl der Einträge.

Abschließend sei noch bemerkt, das in der Klasse TStringDictionary aus dem String-Schlüssel die 16-Bit CRC als Hashwert gebildet wird, die Unit csCRC wird mitgeliefert. Das ist bestimmt nicht optimal, aber mir hat es gereicht. Wer hier bessere Verfahren kennt, kann die natürlich verwenden.

Update:
Was ist neu?
- Die CRC32-Hashfunktion wurde durch die wesentlich schnellere ELF-Hash Funktion ersetzt.
- Neue Methode 'Contains'
- Neue Eigenschaft 'CaseInsensitive'
- Code ansatzweise kommentiert

[edit=Chakotay1308] Mfg, Chakotay1308[/edit]
[edit=Matze]Update hinzugefügt (7.11.06). Mfg, Matze[/edit]
[edit=Matze]Neues Update hinzugefügt (7.6.07). Mfg, Matze[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:41 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz