TDictionary gebruiken voor hashtabellen in Delphi

Geïntroduceerd in Delphi 2009, de TDictionary klasse, gedefinieerd in de Generics.Collections-eenheid, vertegenwoordigt een generieke verzameling hashtabeltype sleutel / waarde-paren.

Met generieke typen, ook geïntroduceerd in Delphi 2009, kunt u klassen definiëren die niet specifiek het type gegevensleden definiëren.

Een woordenboek lijkt in zekere zin op een array. In een array werkt u met een reeks (verzameling) waarden die zijn geïndexeerd door een geheel getal, wat elke waarde van het ordinale type kan zijn. Deze index heeft een onder- en bovengrens.

In een woordenboek kunt u sleutels en waarden opslaan waar deze van elk type kunnen zijn.

De TDictionary Constructor

Vandaar de verklaring van de TDictionary-constructeur:

In Delphi wordt de TDictionary gedefinieerd als een hashtabel. Hashtabellen vertegenwoordigen een verzameling sleutel-en-waardeparen die zijn georganiseerd op basis van de hash-code van de sleutel. Hashtabellen zijn geoptimaliseerd voor lookups (snelheid). Wanneer een sleutel / waarde-paar wordt toegevoegd aan een hashtabel, wordt de hash van de sleutel berekend en opgeslagen samen met het toegevoegde paar.

De TKey en TValue, omdat ze generiek zijn, kunnen van elk type zijn. Als de informatie die u in het woordenboek moet opslaan bijvoorbeeld uit een database komt, kan uw sleutel een GUID (of een andere waarde zijn die de unieke index voorstelt), terwijl de waarde een object kan zijn dat is toegewezen aan een rij met gegevens in uw databasetabellen.

TDictionary gebruiken

Omwille van de eenvoud worden in het onderstaande voorbeeld gehele getallen gebruikt voor TKeys en tekens voor tv-waarden. 

Eerst verklaren we ons woordenboek door op te geven wat de typen TKey en TValue zijn:

Vervolgens wordt het woordenboek gevuld met de methode Toevoegen. Omdat een woordenboek geen twee paren met dezelfde sleutelwaarde kan hebben, kunt u de methode ContainsKey gebruiken om te controleren of een paar met sleutelwaarden al in het woordenboek voorkomt.

Gebruik de methode Verwijderen om een ​​paar uit het woordenboek te verwijderen. Deze methode veroorzaakt geen problemen als een paar met een opgegeven sleutel geen deel uitmaakt van het woordenboek.

Om alle paren te doorlopen door toetsen te doorlopen, kunt u een for in lus gebruiken.

Gebruik de TryGetValue-methode om te controleren of een sleutel / waarde-paar in het woordenboek is opgenomen.

Het woordenboek sorteren

Omdat een woordenboek een hashtabel is, worden items niet in een gedefinieerde sorteervolgorde opgeslagen. Om de toetsen te doorlopen die zijn gesorteerd om aan uw specifieke behoefte te voldoen, profiteert u van de TList - een generiek verzameltype dat sorteren ondersteunt.

De bovenstaande code sorteert toetsen oplopend en aflopend en haalt waarden op alsof ze in de gesorteerde volgorde in het woordenboek zijn opgeslagen. De afnemende sortering van sleutelwaarden van het gehele getal maakt gebruik van TComparer en een anonieme methode.