Utilizarea TDictionary pentru tabelele Hash din Delphi

Introducere în Delphi 2009, Clasa TDictionary, definit în unitatea Generics.Collections, reprezintă o colecție generică de tip tabel hash de perechi cheie-valoare.

Tipurile generice, introduse și în Delphi 2009, vă permit să definiți clase care nu definesc în mod specific tipul de membri.

Un dicționar este, într-un fel, similar cu un tablou. Într-un tablou lucrați cu o serie (colecție) de valori indexate de o valoare întreagă, care poate fi orice valoare de tip ordinal. Acest indice are o delimitare inferioară și una superioară.

Într-un dicționar, puteți stoca chei și valori unde pot fi de orice fel.

Constructorul TDictionary

De aici, declarația constructorului TDictionary:

În Delphi, dicționarul TD este definit ca o tabelă de hash. Tabelele Hash reprezintă o colecție de perechi cheie și valoare care sunt organizate pe baza codului hash al cheii. Tabelele Hash sunt optimizate pentru căutări (viteză). Când se adaugă o pereche cheie-valoare la o tabelă de hash, hash-ul cheii este calculat și stocat împreună cu perechea adăugată.

TKey și TValue, deoarece sunt generice, pot fi de orice tip. De exemplu, dacă informațiile pe care trebuie să le stocați în dicționar provin dintr-o bază de date, cheia dvs. poate fi un GUID (sau o altă valoare care prezintă indexul unic), în timp ce Valoarea poate fi un obiect mapat într-un rând de date din tabelele dvs. de bază de date.

Folosind TDictionary

Din motive de simplitate, exemplul de mai jos folosește numere întregi pentru TKeys și caractere pentru TValues. 

În primul rând, declarăm dicționarul nostru specificând care vor fi tipurile de TKey și TValue:

Apoi, dicționarul este completat folosind metoda Add. Deoarece un dicționar nu poate avea două perechi cu aceeași valoare Key, puteți utiliza metoda ContainsKey pentru a verifica dacă o pereche evaluată pentru cheie este deja în dicționar.

Pentru a elimina o pereche din dicționar, utilizați metoda Eliminare. Această metodă nu va cauza probleme dacă o pereche cu o cheie specificată nu face parte din dicționar.

Pentru a parcurge toate perechile făcând buclă prin intermediul tastelor, puteți face o în buclă.

Utilizați metoda TryGetValue pentru a verifica dacă în dicționar este inclusă o pereche cheie-valoare.

Sortarea dicționarului

Deoarece un dicționar este un tabel hash, acesta nu stochează articole într-o ordine de sortare definită. Pentru a repeta cheile care sunt sortate pentru a răspunde nevoilor dvs. specifice, profitați de TList - un tip de colecție generică care acceptă sortarea.

Codul de mai sus sortează tastele crescând și descrescând și apucă valori ca și cum ar fi stocate în ordinea sortată din dicționar. Sortarea descendentă a valorilor cheie de tip întreg folosește TComparer și o metodă anonimă.