Utilisation de TDictionary pour les tables de hachage dans Delphi

Introduit dans Delphi 2009, le TDictionary class, défini dans l'unité Generics.Collections, représente une collection générique de type table de hachage de paires clé-valeur.

Les types génériques, également introduits dans Delphi 2009, vous permettent de définir des classes qui ne définissent pas spécifiquement le type de membres de données.

Un dictionnaire est en quelque sorte semblable à un tableau. Dans un tableau, vous travaillez avec une série (collection) de valeurs indexées par une valeur entière, qui peut être n'importe quelle valeur de type ordinal. Cet indice a une limite inférieure et une limite supérieure.

Dans un dictionnaire, vous pouvez stocker des clés et des valeurs où l'un ou l'autre peut être de n'importe quel type.

Le constructeur TDictionary

D'où la déclaration du constructeur TDictionary:

Dans Delphi, le TDictionary est défini comme une table de hachage. Les tables de hachage représentent une collection de paires clé-valeur organisées en fonction du code de hachage de la clé. Les tables de hachage sont optimisées pour les recherches (vitesse). Lorsqu'une paire clé-valeur est ajoutée à une table de hachage, le hachage de la clé est calculé et stocké avec la paire ajoutée.

La TKey et la TValue, car ce sont des génériques, peuvent être de tout type. Par exemple, si les informations que vous devez stocker dans le dictionnaire proviennent d'une base de données, votre clé peut être un GUID (ou une autre valeur présentant l'index unique) tandis que la valeur peut être un objet mappé à une ligne de données dans vos tables de base de données.

Utilisation de TDictionary

Par souci de simplicité, l'exemple ci-dessous utilise des entiers pour les TKeys et des caractères pour les TValues. 

Tout d'abord, nous déclarons notre dictionnaire en spécifiant quels seront les types de TKey et TValue:

Ensuite, le dictionnaire est rempli à l'aide de la méthode Add. Étant donné qu'un dictionnaire ne peut pas avoir deux paires avec la même valeur de clé, vous pouvez utiliser la méthode ContainsKey pour vérifier si une paire de valeurs clés se trouve déjà dans le dictionnaire.

Pour supprimer une paire du dictionnaire, utilisez la méthode Remove. Cette méthode ne causera pas de problèmes si une paire avec une clé spécifiée ne fait pas partie du dictionnaire.

Pour parcourir toutes les paires en parcourant les clés, vous pouvez faire une boucle for in.

Utilisez la méthode TryGetValue pour vérifier si une paire clé-valeur est incluse dans le dictionnaire.

Tri du dictionnaire

Étant donné qu'un dictionnaire est une table de hachage, il ne stocke pas les éléments dans un ordre de tri défini. Pour parcourir les clés triées pour répondre à vos besoins spécifiques, profitez de TList - un type de collection générique qui prend en charge le tri.

Le code ci-dessus trie les clés en ordre croissant et décroissant et récupère les valeurs comme si elles étaient stockées dans l'ordre de tri dans le dictionnaire. Le tri décroissant des valeurs de clé de type entier utilise TComparer et une méthode anonyme.