Introdusert i Delphi 2009, The TDictionary-klasse, definert i Generics. Samlingsenhet representerer en generisk samling av hasjtabellstypene av nøkkelverdipar.
Generiske typer, som også ble introdusert i Delphi 2009, lar deg definere klasser som ikke spesifikt definerer hvilken type datamedlemmer.
En ordbok er på sett og vis lik en matrise. I en matrise du jobber med en serie (samling) av verdier indeksert med en heltallverdi, som kan være hvilken som helst ordinal type verdi. Denne indeksen har en nedre og en øvre grense.
I en ordbok kan du lagre nøkler og verdier der begge kan være av hvilken som helst type.
TDictionary-konstruktøren
Derav erklæringen fra TDictionary-konstruktøren:
I Delphi er TDictionary definert som en hasjtabell. Hash-tabeller representerer en samling nøkkel-og-verdipar som er organisert basert på hasjkoden til nøkkelen. Hash-tabeller er optimalisert for oppslag (hastighet). Når et nøkkelverdipar legges til en hasjtabell, beregnes hasj av nøkkelen og lagres sammen med det lagt paret.
TKey og TValue, fordi de er generiske, kan være av hvilken som helst type. Hvis for eksempel informasjonen du skal lagre i ordboken kommer fra en eller annen database, kan nøkkelen være en GUID (eller noen annen verdi som presenterer den unike indeksen) -verdien mens verdien kan være et objekt som er kartlagt til en rad med data i databasen din tabeller.
Bruker TDictionary
For enkelhets skyld bruker eksemplet nedenfor heltall for TKeys og tegn for TValues.
Først erklærer vi ordboken vår ved å spesifisere hva slags TKey og TValue vil være:
Deretter blir ordboken fylt ut ved å legge til metoden. Fordi en ordbok ikke kan ha to par med samme nøkkelverdi, kan du bruke ContainKey-metoden for å sjekke om det allerede finnes et par nøkkelverdifulle par i ordboken.
Hvis du vil fjerne et par fra ordboken, bruker du metoden Fjern. Denne metoden vil ikke forårsake problemer hvis et par med en spesifisert nøkkel ikke er en del av ordboken.
For å gå gjennom alle parene ved å sløyfe gjennom tastene kan du gjøre en for i løkka.
Bruk TryGetValue-metoden for å sjekke om noen nøkkelverdipar er inkludert i ordboken.
Sortering av ordboken
Fordi en ordbok er en hasjetabell, lagrer den ikke elementer i en definert sorteringsrekkefølge. For å iterere gjennom tastene som er sortert for å dekke ditt spesifikke behov, kan du dra nytte av TList - en generisk samlingstype som støtter sortering.
Koden over sorterer taster stigende og synkende og griper verdier som om de var lagret i sortert rekkefølge i ordboken. Den synkende sorteringen av heltallstastnøkkelverdier bruker TComparer og en anonym metode.
Når nøkler og verdier er av TObject-type
Eksemplet oppført over er et enkelt fordi både nøkkelen og verdien er enkle typer. Du kan ha komplekse ordbøker der både nøkkelen og verdien er "komplekse" typer som poster eller objekter.
Her er et annet eksempel:
Her brukes en tilpasset post for nøkkelen og et tilpasset objekt / klasse brukes for verdien.
Legg merke til bruken av en spesialisert TObjectDictionary klasse her. TObjectDictionary kan håndtere objektenes levetid automatisk.
Nøkkelverdien kan ikke være null, mens verdiverdien kan.
Når en TObjectDiction blir instantivert, spesifiserer en Ownerships-parameter om ordboken eier nøklene, verdiene eller begge deler - og hjelper deg derfor ikke med å minne i minnet.