AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hash-Tabellen

Ein Thema von alzaimar · begonnen am 8. Mai 2005
Antwort Antwort
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#1

Hash-Tabellen

  Alt 8. Mai 2005, 16:58
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]
Angehängte Dateien
Dateityp: pas csdictionary_693.pas (14,3 KB, 933x aufgerufen)
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:12 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