Izmantojot TD Dictionary hash Tables Delphi

Ieviests 2009. gada Delphi TD Dictionary klase, kas definēts Generics. Kolekciju vienība pārstāv vispārīgu sajaukšanas tabulas veida atslēgu vērtību pāru kolekciju.

Vispārējie veidi, kas ieviests arī 2009. gada Delphi, ļauj definēt klases, kas konkrēti nenosaka datu dalībnieku tipu.

Vārdnīca savā ziņā ir līdzīga masīvam. In masīvs jūs strādājat ar vērtību sēriju (kolekciju), kas indeksēta ar veselu skaitli, kas var būt jebkurš kārtējā tipa vērtība. Šim indeksam ir apakšējā un augšējā robeža.

Vārdnīcā varat saglabāt atslēgas un vērtības, kur var būt jebkura veida atslēgas.

TD Dictionary konstruktors

Tādējādi TDictionary konstruētāja deklarācija:

Delfā TD Dictionary tiek definēta kā hash table. Sajaukšanās tabulas attēlo atslēgu un vērtību pāru kolekciju, kas ir sakārtota, pamatojoties uz atslēgas jaucējkodu. Hash tabulas ir optimizētas meklēšanai (ātrums). Kad atslēgu vērtības pāris tiek pievienots hash tabulai, atslēgas hash tiek aprēķināts un saglabāts kopā ar pievienoto pāri.

Tā kā TKey un TValue ir ģenēriski, tie var būt jebkura veida. Piemēram, ja informācija, kas jums jāglabā vārdnīcā, nāk no kādas datu bāzes, jūsu atslēga var būt GUID (vai kāda cita vērtība, kas uzrāda unikālo indeksa vērtību), bet vērtība var būt objekts, kas kartēts datu rindā ar datu bāzi galdi.

instagram viewer

Izmantojot TD Dictionary

Vienkāršības labad zemāk esošajā piemērā TKeys ir izmantoti veseli skaitļi un TValues ​​- simboli.

Pirmkārt, mēs deklarējam savu vārdnīcu, norādot, kādi būs TKey un TValue tipi:

Tad vārdnīca tiek aizpildīta, izmantojot metodi Add. Tā kā vārdnīcai nevar būt divi pāri ar vienādu atslēgas vērtību, varat izmantot ContainsKey metodi, lai pārbaudītu, vai kāds atslēgas vērtīgs pāris jau atrodas vārdnīcā.

Lai noņemtu pāri no vārdnīcas, izmantojiet noņemšanas metodi. Šī metode neradīs problēmas, ja pāris ar norādīto atslēgu neietilpst vārdnīcā.

Lai izietu cauri visiem pāriem, izmantojot cilpas, jūs varat rīkoties šādi priekš cilpas.

Izmantojiet metodi TryGetValue, lai pārbaudītu, vai vārdnīcā ir iekļauts kāds atslēgas vērtību pāris.

Šķirot vārdnīcu

Tā kā vārdnīca ir jaukta tabula, tā neuzglabā vienumus noteiktā kārtošanas secībā. Lai atkārtotos, izmantojot atslēgas, kas sakārtotas atbilstoši jūsu īpašajām vajadzībām, izmantojiet TList priekšrocības - vispārīgu kolekcijas veidu, kas atbalsta šķirošanu.

Iepriekš minētais kods sakārto taustiņus augoši un dilstoši un satver vērtības tā, it kā tās tiktu glabātas sakārtotā secībā vārdnīcā. Vesela skaitļa tipa atslēgu vērtību šķirošanā dilstošā secībā tiek izmantota TComparer un anonīma metode.

Kad taustiņi un vērtības ir TObject tipa

Iepriekš uzskaitītais piemērs ir vienkāršs, jo gan atslēga, gan vērtība ir vienkārši veidi. Jums var būt sarežģītas vārdnīcas, kurās gan atslēga, gan vērtība ir "sarežģīti" tipi, piemēram, ieraksti vai objekti.

Šeit ir vēl viens piemērs:

Šeit atslēgai tiek izmantots pielāgots ieraksts, bet vērtībai - pielāgots objekts / klase.

Ņemiet vērā specializētās ierīces izmantošanu TObjectDictionary klase šeit. TObjectDictionary var automātiski rīkoties ar objekta kalpošanas laiku.

Atslēgas vērtība nevar būt nulle, bet vērtības vērtība var.

Kad TObjectDictionary tiek atveidots, parametrs Ownerships norāda, vai vārdnīcai ir atslēgas, vērtības vai abas - un tāpēc tas palīdz, lai jums nebūtu atmiņas noplūdes.

instagram story viewer