Pristatytas 2009 m. „Delphi“ TD Dictionary klasė, apibrėžtas Generics. Kolekcijų vienetas - tai bendras maišos lentelės tipo pagrindinių vertės porų rinkinys.
Bendrosios rūšys, taip pat pristatytą „Delphi 2009“, leidžia apibrėžti klases, kurios konkrečiai neapibrėžia duomenų narių tipo.
Žodynas tam tikra prasme yra panašus į masyvą. Į masyvas dirbate su verčių, surinktų iš sveikojo skaičiaus, rinkiniu (rinkiniu), kuris gali būti bet koks ordinarinio tipo reikšmė. Šis indeksas turi apatinę ir viršutinę ribas.
Žodyne galite saugoti raktus ir reikšmes, kur jie gali būti bet kokio tipo.
„TD Dictionary“ konstruktorius
Taigi „TD Dictionary“ konstruktoriaus deklaracija:
„Delphi“ TD Dictionary apibrėžiamas kaip maišos lentelė. Maišymo lentelės rodo raktų ir reikšmių porų, kurios yra suskirstytos pagal rakto maišos kodą, rinkinį. Maišymo lentelės yra optimizuotos paieškai (greitis). Kai raktų reikšmių pora pridedama prie maišos lentelės, rakto maiša apskaičiuojama ir saugoma kartu su pridėta pora.
„TKey“ ir „TValue“ gali būti bet kokio tipo, nes jie yra generiniai. Pvz., Jei informacija, kurią turite išsaugoti žodyne, gaunama iš tam tikros duomenų bazės, jūsų raktas gali būti GUID (arba kita vertė, pateikianti unikalią rodyklės vertę, o vertė gali būti objektas, susietas su duomenų eilute jūsų duomenų bazėje stalai.
Naudojant TD Dictionary
Paprastumo dėlei žemiau pateiktame pavyzdyje naudojami sveikieji skaičiai „TKeys“ ir ženklai „TValues“.
Pirmiausia mes deklaruojame savo žodyną nurodydami, kokie bus TKey ir TValue tipai:
Tada žodynas užpildomas naudojant metodą Pridėti. Kadangi žodyne negali būti dviejų porų su ta pačia rakto verte, galite naudoti ContainsKey metodą, kad patikrintumėte, ar kai kurios raktų vertinamos poros jau yra žodyno viduje.
Norėdami pašalinti porą iš žodyno, naudokite metodą Pašalinti. Šis metodas nesukels problemų, jei pora su nurodytu raktu nėra žodyno dalis.
Norėdami pereiti visas poras, permesdami klavišus, galite tai padaryti už kilpą.
Naudokite „TryGetValue“ metodą ir patikrinkite, ar į žodyną įtraukta kokia nors raktų reikšmių pora.
Rūšiuoti žodyną
Žodynas yra maišos lentelė, todėl elementai nekaupiami apibrėžta rūšiavimo tvarka. Norėdami pakartoti klavišus, surūšiuotus pagal jūsų specifinius poreikius, pasinaudokite TList - bendruoju kolekcijos tipu, palaikančiu rūšiavimą.
Aukščiau esantis kodas rikiuoja raktus didėjančia ir mažėjančia tvarka ir sugriebia reikšmes taip, tarsi jie būtų saugomi surūšiuota tvarka žodyne. Mažėjančiu sveikųjų skaičių raktų tipų rūšiavimu naudojamas „TComparer“ ir anoniminis metodas.
Kai raktai ir vertės yra „TObject“ tipo
Aukščiau pateiktas pavyzdys yra paprastas, nes raktas ir reikšmė yra paprasti tipai. Galite turėti sudėtingus žodynus, kuriuose raktas ir reikšmė yra „sudėtingi“ tipai, tokie kaip įrašai ar objektai.
Štai dar vienas pavyzdys:
Čia raktui naudojamas tinkintas įrašas, o vertei - tinkintas objektas / klasė.
Atkreipkite dėmesį į specializuoto naudojimo galimybes „TObjectDictionary“ klasė čia. „TObjectDictionary“ gali automatiškai valdyti objektų eksploatavimo laiką.
Rakto reikšmė negali būti lygi nuliui, o vertės reikšmė gali būti.
Kai TObjectDictionary žurnalas yra momentinis, „Ownerships“ parametras nurodo, ar žodynui priklauso raktai, reikšmės, ar abu - ir todėl jis padeda išvengti atminties nutekėjimo.