Použitie TDictionary pre tabuľky Hash v Delphi

click fraud protection

Zavedené v Delphi 2009, TDictionary class, definované v časti Generics. Jednotka kolekcií predstavuje všeobecnú kolekciu typu hašovacej tabuľky párov kľúč - hodnota.

Generické typy, ktorý bol predstavený v Delphi 2009, vám umožňuje definovať triedy, ktoré konkrétne nedefinujú typ dátových členov.

Slovník je svojím spôsobom podobný súboru. V an rad pracujete s radom (kolekciou) hodnôt indexovaných celočíselnou hodnotou, ktorá môže byť ľubovoľná hodnota poradového typu. Tento index má dolnú a hornú hranicu.

V slovníku môžete ukladať kľúče a hodnoty, kde môže byť ľubovoľný typ.

TDictionary Constructor

Preto vyhlásenie konštruktéra TDictionary:

V Delphi je TDictionary definovaný ako hašovacia tabuľka. Hašovacie tabuľky predstavujú kolekciu párov kľúč - hodnota, ktoré sú usporiadané na základe hashovacieho kódu kľúča. Tabuľky hash sú optimalizované pre vyhľadávanie (rýchlosť). Keď sa pár kľúč-hodnota pridá do hašovacej tabuľky, vypočíta sa hash kľúča a uloží sa spolu s pridaným párom.

TKey a TValue, pretože sú druhové, môžu byť akéhokoľvek typu. Napríklad, ak informácie, ktoré chcete uložiť do slovníka, pochádzajú z nejakej databázy, váš kľúč môže byť identifikátor GUID (alebo nejaká iná hodnota predstavujúca jedinečný index) hodnota, zatiaľ čo hodnota môže byť objekt mapovaný na rad údajov v databáze stoly.

instagram viewer

Používanie TDictionary

Z dôvodu jednoduchosti príklad uvedený nižšie používa celé čísla pre TKeys a znaky pre TValues.

Najprv deklarujeme náš slovník určením, aké budú typy TKey a TValue:

Potom sa slovník naplní pomocou metódy Pridať. Pretože slovník nemôže mať dva páry s rovnakou hodnotou kľúča, môžete pomocou metódy ContainsKey skontrolovať, či už nejaký pár s hodnotou kľúča už nie je v slovníku.

Ak chcete zo slovníka odstrániť pár, použite metódu Odstrániť. Táto metóda nespôsobí problémy, ak pár so zadaným kľúčom nie je súčasťou slovníka.

Ak chcete prejsť všetkými pármi opakovaním v klávesoch, môžete urobiť a pre slučku.

Pomocou metódy TryGetValue skontrolujte, či je v slovníku zahrnutý nejaký pár kľúč - hodnota.

Triedenie slovníka

Pretože slovník je hashova tabuľka, neukladá položky v definovanom poradí zoradenia. Ak chcete vykonať iteráciu pomocou kľúčov, ktoré sú zoradené podľa vašich konkrétnych potrieb, využite výhody TList - všeobecného typu kolekcie, ktorý podporuje triedenie.

Vyššie uvedený kód triedi kľúče vzostupne a zostupne a uchopí hodnoty, akoby boli uložené v poradí v slovníku. Zostupné triedenie celočíselných hodnôt kľúča používa TComparer a anonymnú metódu.

Keď sú kľúče a hodnoty typu TObject

Vyššie uvedený príklad je jednoduchý, pretože kľúč aj hodnota sú jednoduché typy. Môžete mať zložité slovníky, kde kľúč aj hodnota sú „zložité“ typy, ako sú záznamy alebo objekty.

Tu je ďalší príklad:

Tu sa pre kľúč používa vlastný záznam a pre hodnotu sa používa vlastný objekt / trieda.

Všimnite si použitie špecializovaného pracovníka TObjectDictionary trieda tu. TObjectDictionary dokáže automaticky spracovať životnosť objektov.

Hodnota kľúča nemôže byť nulová, zatiaľ čo hodnota Hodnota môže.

Keď je inštancia TObjectDictionary vytvorená, parameter vlastníctva špecifikuje, či slovník vlastní kľúče, hodnoty alebo obidve - a preto vám pomáha vyhnúť sa úniku pamäte.

instagram story viewer