Brug af TDictionary til Hash-tabeller i Delphi

Introduceret i Delphi 2009, the TDiske klasse, defineret i Generics. Samlingsenhed repræsenterer en generisk samling af hashtabeltypen af ​​nøgleværdipar.

Generiske typer, også introduceret i Delphi 2009, giver dig mulighed for at definere klasser, der ikke specifikt definerer typen af ​​datamedlemmer.

En ordbog ligner på en måde en array. I en matrix du arbejder med en serie (samling) af værdier indekseret med en heltalværdi, som kan være enhver ordinal type værdi. Dette indeks har en nedre og en øvre grænse.

I en ordbog kan du gemme nøgler og værdier, hvor begge kan være af en hvilken som helst type.

TDictionary-konstruktøren

Derfor erklæringen fra TDictionary-konstruktøren:

I Delphi er TDictions defineret som en hash-tabel. Hash-tabeller repræsenterer en samling nøgle- og værdipar, der er organiseret baseret på hash-koden for nøglen. Hash-tabeller er optimeret til opslag (hastighed). Når et nøgleværdipar føjes til en hashtabel, beregnes hash af nøglen og gemmes sammen med det tilføjede par.

instagram viewer

TKey og TValue, fordi de er generiske, kan være af enhver art. For eksempel, hvis de oplysninger, du skal gemme i ordbogen, kommer fra en database, kan din nøgle være en GUID (eller en anden værdi, der præsenterer det unikke indeks) -værdi, mens værdien kan være et objekt, der er kortlagt til en række data i din database tabeller.

Brug af TDictionary

For enkelhedens skyld bruger eksemplet nedenfor heltal til TKeys og tegn til TValuer.

Først erklærer vi vores ordbog ved at specificere, hvilke typer TKey og TValue vil være:

Derefter udfyldes ordbogen ved hjælp af Tilføj metoden. Da en ordbog ikke kan have to par med den samme nøgleværdi, kan du bruge ContainKey-metoden til at kontrollere, om der allerede findes et par nøgleværdier i ordbogen.

Hvis du vil fjerne et par fra ordbogen, skal du bruge metoden Fjern. Denne metode medfører ikke problemer, hvis et par med en specificeret nøgle ikke er en del af ordbogen.

For at gå gennem alle parene ved at sløjfe gennem tasterne kan du gøre en til i løkken.

Brug TryGetValue-metoden til at kontrollere, om et par nøgleværdipar er inkluderet i ordbogen.

Sortering af ordbogen

Da en ordbog er en hash-tabel, gemmer den ikke emner i en defineret sorteringsrækkefølge. For at gentage gennem nøglerne, der er sorteret for at imødekomme dit specifikke behov, skal du drage fordel af TList - en generisk samlingstype, der understøtter sortering.

Koden ovenfor sorterer nøgler stigende og faldende og griber værdier, som om de var gemt i den sorterede rækkefølge i ordbogen. Den faldende sortering af nøgleværdier for heltalstypen bruger TComparer og en anonym metode.

Når nøgler og værdier er af TObject-type

Det ovenfor anførte eksempel er et enkelt, fordi både nøglen og værdien er enkle typer. Du kan have komplekse ordbøger, hvor både nøglen og værdien er "komplekse" typer som poster eller objekter.

Her er et andet eksempel:

Her bruges en brugerdefineret post til nøglen og et brugerdefineret objekt / klasse bruges til værdien.

Bemærk brugen af ​​en specialiseret TObjectDictionary klasse her. TObjectDiction kan håndtere objekternes levetid automatisk.

Nøgleværdien kan ikke være nul, mens værdiværdien kan.

Når en TObjectDiction er instantieret, specificerer en Ownerships-parameter, om ordbogen ejer tasterne, værdierne eller begge dele - og hjælper dig derfor med ikke at have hukommelseslækager.

instagram story viewer