Använda TDScript för Hash-tabeller i Delphi

Introducerad i Delphi 2009, The TDiska klass, definierad i enheten Generics.Collections, representerar en generisk samling av hashtabellstyp av nyckelvärdespar.

Generiska typer, som också introducerades i Delphi 2009, låter dig definiera klasser som inte specifikt definierar typen av datamedlemmar.

En ordbok liknar på ett sätt en matris. I en matris arbetar du med en serie (samling) av värden som indexeras av ett heltal, vilket kan vara valfritt ordinärt värde. Detta index har en nedre och en övre gräns.

I en ordlista kan du lagra nycklar och värden där antingen kan vara av valfri typ.

TDScript-konstruktören

Därför deklarationen från TDictionary-konstruktören:

I Delphi definieras TDScript som en hashtabell. Hashtabeller representerar en samling nyckel- och värdepar som är organiserade baserat på hashkoden för nyckeln. Hashtabeller är optimerade för uppslag (hastighet). När ett nyckelvärdespar läggs till i en hashtabell beräknas hash för nyckeln och lagras tillsammans med det tillagda paret.

TKey och TValue, eftersom de är generiska, kan vara av alla slag. Om till exempel informationen du ska lagra i ordboken kommer från någon databas kan din nyckel vara ett GUID (eller något annat värde som visar det unika indexet) medan värdet kan vara ett objekt mappat till en rad med data i dina databastabeller.

Använda TDictionary

För enkelhetens skull använder exemplet nedan heltal för TKeys och karaktärer för TValues. 

Först förklarar vi vår ordlista genom att ange vilka typer av TKey och TValue kommer att vara:

Därefter fylls ordboken med metoden Lägg till. Eftersom en ordlista inte kan ha två par med samma nyckelvärde, kan du använda metoden ContainKey för att kontrollera om ett par nyckelvärderade par redan finns i ordboken.

För att ta bort ett par från ordboken använder du metoden Ta bort. Den här metoden orsakar inte problem om ett par med en specificerad nyckel inte är en del av ordboken.

För att gå igenom alla par genom att slinga genom knapparna kan du göra en for in-loop.

Använd TryGetValue-metoden för att kontrollera om något nyckelvärdespar ingår i ordboken.

Sortera ordboken

Eftersom en ordlista är en hashtabell lagrar den inte objekt i en definierad sorteringsordning. För att upprepa knapparna som sorteras för att tillgodose ditt specifika behov, dra fördel av TList - en generisk samlingstyp som stöder sortering.

Koden ovan sorterar nycklar stigande och fallande och tar värden som om de var lagrade i den sorterade ordningen i ordboken. Den fallande sorteringen av heltalstyp Nyckelvärden använder TComparer och en anonym metod.