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

click fraud protection

Introducerad i Delphi 2009, The TDiska klass, definierad i Generics. Samlingsenheten 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 vilken typ av datamedlemmar.

En ordbok liknar på ett sätt en matris. I en array du arbetar med en serie (samling) av värden indexerade med ett heltal, vilket kan vara valfritt ordinaltypvä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 vilken typ som helst.

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.

instagram viewer

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 presenterar det unika index) -värdet medan värdet kan vara ett objekt mappat till en rad med data i din databas tabeller.

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 tangenter kan du göra en för i slinga.

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.

När nycklar och värden är av TObject-typ

Exemplet ovan är ett enkelt eftersom både nyckeln och värdet är enkla typer. Du kan ha komplexa ordböcker där både nyckeln och värdet är "komplexa" typer som poster eller objekt.

Här är ett annat exempel:

Här används en anpassad post för nyckeln och ett anpassat objekt / klass används för värdet.

Notera användningen av en specialiserad TObjectDictionary klass här. TObjectDiction kan hantera objektens livslängd automatiskt.

Nyckelvärdet kan inte vara noll medan värdet kan.

När en TObjectDiction är inställd, anger en Ownerships-parameter om ordboken äger nycklarna, värdena eller båda - och hjälper dig därför att inte ha minnesläckor.

instagram story viewer