Korištenje TDictionary-a za Hash Tabele u Delphiju

click fraud protection

Predstavljen u Delphi 2009, The Klasa TD-a, definirano u Genericima. Zbirka jedinica, predstavlja generičku kolekciju vrsta parova ključa i vrijednosti.

Generičke vrste, također uveden u Delphi 2009, omogućuju vam definiranje klasa koje ne definiraju posebno vrstu podataka.

Rječnik je na neki način sličan nizu. U an red radite s nizom (zbirkama) vrijednosti indeksiranih cjelobrojnom vrijednošću, koja može biti bilo koja redna vrijednost tipa. Ovaj indeks ima donju i gornju granicu.

U rječnik možete pohraniti ključeve i vrijednosti u kojima mogu biti bilo koje vrste.

Konstruktor TDictionary

Odatle je i izjava TD konstruktora:

U Delfima je TDictionary definiran kao hash tablica. Hash tablice predstavljaju skup parova ključa i vrijednosti koji su organizirani na temelju hash koda ključa. Hash tablice optimizirane su za pretraživanja (brzinu). Kad se par ključ-vrijednost doda u hash tablicu, hash ključa se izračunava i pohranjuje zajedno s dodanim parom.

TKey i TValue, jer su generički, mogu biti bilo koje vrste. Na primjer, ako informacije koje želite pohraniti u rječnik dolaze iz neke baze podataka, vaš ključ može biti GUID (ili neke druge vrijednosti koje predstavljaju jedinstveni indeks) vrijednosti, dok vrijednost može biti objekt preslikan u niz podataka u vašoj bazi podataka tablice.

instagram viewer

Korištenje TDictionary-a

Radi jednostavnosti, u primjeru u nastavku se koriste cijeli brojevi za TKeys i chars za TValues.

Prvo izjavljujemo naš rječnik određivanjem vrsta tipova TKey i TValue:

Tada se rječnik ispunjava metodom Dodaj. Budući da rječnik ne može imati dva para s istom vrijednošću Key, pomoću metode ContainsKey možete provjeriti je li neki par vrijednosti vrijednosti ključa već unutar rječnika.

Da biste uklonili par iz rječnika, koristite metodu Ukloni. Ova metoda neće uzrokovati probleme ako par s navedenom tipkom nije dio rječnika.

Da biste prošli kroz sve parove pretraživanjem ključeva možete učiniti za u petlji.

Pomoću metode TryGetValue provjerite je li neki par ključ-vrijednost uključen u rječnik.

Razvrstavanje rječnika

Budući da je rječnik tablica hash, on ne pohranjuje stavke u definiranom redoslijedu sortiranja. Za ponavljanje pomoću tipki razvrstanih u skladu s vašim specifičnim potrebama iskoristite TList - općenitu vrstu kolekcije koja podržava sortiranje.

Gornji kod sortira tipke uzlazno i ​​silazno i ​​uzima vrijednosti kao da su spremljene u poredani redoslijed u rječniku. Silazno razvrstavanje vrijednosti ključeva cijelog tipa koristi TComparer i anonimnu metodu.

Kad su ključevi i vrijednosti vrste TObject

Gore navedeni primjer je jednostavan jer su i ključ i vrijednost jednostavni tipovi. Možete imati složene rječnike u kojima su i ključ i vrijednost "složeni" tipovi poput zapisa ili objekata.

Evo još jednog primjera:

Ovdje se upotrebljava prilagođeni zapis za Ključ, a prilagođeni objekt / klasa koristi se za vrijednost.

Imajte na umu upotrebu specijaliziranog TObjectDictionary klasa ovdje. TObjectDictionary može automatski obraditi vijek trajanja objekata.

Vrijednost Key ne može biti nula, dok vrijednost Value može.

Kada se TObjectD Dictionary aktivira, parametar Ownerships određuje ima li rječnik ključeve, vrijednosti ili oboje - i tako vam pomaže da nema curenja memorije.

instagram story viewer