Uporaba TDictionary za tabele Hash v Delphiju

Predstavljen v Delphi 2009, The Razred razreda TD, opredeljeno v Generiki. Zbirka enota, predstavlja generično zbirko vrst parov ključ in vrednost.

Generične vrste, predstavljena tudi v Delphiju 2009, vam omogočajo, da določite razrede, ki ne definirajo posebej vrste podatkovnih članov.

Slovar je na nek način podoben matriki. V an matrika delate z nizom (zbirko) vrednosti, indeksiranih s celoštevilčno vrednostjo, ki je lahko katera koli redna vrednost tipa. Ta indeks ima spodnjo in zgornjo mejo.

V slovarju lahko shranite ključe in vrednosti, kjer so lahko katere koli vrste.

Konstruktor TDictionary

Od tod tudi izjava konstruktorja TDictionary:

V Delfih je TDictionary definiran kot hash tabela. Hash tabele predstavljajo zbirko parov ključ in vrednost, ki so organizirani na podlagi hash kode ključa. Hash tabele so optimizirane za iskanje (hitrost). Ko je par ključ-vrednost dodan v hash tabelo, se hash ključa izračuna in shrani skupaj z dodanim parom.

TKey in TValue, ker sta generična, sta lahko poljubna. Na primer, če informacije, ki jih želite shraniti v slovar, prihajajo iz neke baze podatkov, je vaš ključ lahko GUID (ali neka druga vrednost, ki predstavlja edinstveno vrednost indeksa), medtem ko je vrednost lahko objekt, preslikan v vrstico podatkov v vaši zbirki podatkov mize.

instagram viewer

Uporaba TDictionary

Zaradi enostavnosti je v spodnjem primeru uporabljena cela števila za TKeys in črke za TValues.

Najprej razglasimo svoj slovar, tako da določimo, kakšne vrste bosta TKey in TValue:

Nato se slovar napolni z uporabo metode Dodaj. Ker slovar ne more imeti dveh parov z isto vrednostjo Key, lahko z metodo ContainsKey preverite, ali je nek par, ki ima vrednost ključ, že znotraj slovarja.

Če želite par odstraniti iz slovarja, uporabite metodo Odstrani. Ta metoda ne bo povzročala težav, če par z določenim ključem ni del slovarja.

Če želite iti skozi vse pare z vrtenjem ključev, lahko storite za v zanki.

S pomočjo metode TryGetValue preverite, ali je v slovarju nekaj para ključ-vrednost.

Razvrščanje slovarja

Ker je slovar hash tabela, ne shranjuje elementov v določenem vrstnem redu. Če želite ponoviti s tipkami, ki so razvrščene glede na vaše posebne potrebe, izkoristite TList - splošno vrsto zbirke, ki podpira razvrščanje.

Zgornja koda razvršča tipke po naraščajočih in padajočih in zajema vrednosti, kot da so shranjene v razvrščenem vrstnem redu v slovarju. Padajoče razvrščanje vrednosti ključev celotnega tipa uporablja TComparer in anonimno metodo.

Ko so tipke in vrednosti tipa TObject

Zgoraj navedeni primer je preprost, saj sta ključ in vrednost preprosta tipa. Lahko imate zapletene slovarje, v katerih sta tako ključ kot vrednost "kompleksni" tipi, kot so zapisi ali predmeti.

Tu je še en primer:

Tu je za ključ uporabljen zapis po meri, za vrednost / objekt po meri pa se uporablja vrednost.

Upoštevajte uporabo specializiranega TObjectD slovar razred tukaj. TObjectDictionary lahko samodejno obravnava življenjsko dobo predmetov.

Vrednost Key ne more biti nič, medtem ko vrednost Value lahko.

Ko je TObjectD slovar sprožen, parameter Ownerships določi, ali ima slovar ključe, vrednosti ali oboje - in zato pomaga, da ne pride do puščanja pomnilnika.

instagram story viewer