Utilizarea TDictionary pentru tabelele Hash din Delphi

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

Tipuri generice, introdus și în Delphi 2009, vă permit să definiți clase care nu definesc în mod specific tipul de date.

Un dicționar este, într-un fel, similar cu un tablou. Într-un mulțime lucrezi cu o serie (colecție) de valori indexate de o valoare întreagă, care poate fi oricare valoarea tipului ordinal. Acest index 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 o pereche de cheie-valoare este adăugată la o tabelă de hash, hash-ul cheii este calculat și stocat împreună cu perechea adăugată.

instagram viewer

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

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 un pentru î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ă în dicționar. Sortarea descendentă a valorilor cheie de tip întreg folosește TComparer și o metodă anonimă.

Când cheile și valorile sunt de tip obiect

Exemplul enumerat mai sus este unul simplu, deoarece atât cheia, cât și valoarea sunt tipuri simple. Puteți avea dicționare complexe în care atât cheia, cât și valoarea sunt tipuri „complexe” precum înregistrări sau obiecte.

Iată un alt exemplu:

Aici se utilizează o înregistrare personalizată pentru cheie și se folosește un obiect / clasă personalizat pentru valoare.

Rețineți utilizarea unui specialist TObjectDictionary clasa aici. TObjectDictionary poate gestiona viața obiectelor în mod automat.

Valoarea cheie nu poate fi nulă, în timp ce valoarea Valoare poate.

Când un TObjectDictionary este inițiat, un parametru Ownerships specifică dacă dicționarul deține cheile, valorile sau ambele - și, prin urmare, vă ajută să nu aveți scurgeri de memorie.

instagram story viewer