C# Programming

Maîtriser les HashMaps en C# avec Dictionary

Spread the love

C# ne propose pas de classe directement nommée « HashMap », contrairement à Java. Cependant, sa classe Dictionary<TKey, TValue> offre des fonctionnalités équivalentes et est l’approche recommandée pour les opérations de hash map.

Table des matières

Utiliser Dictionary<TKey, TValue> comme une Hash Map

Dictionary<TKey, TValue> offre un stockage clé-valeur avec une complexité temporelle moyenne de O(1) pour les opérations courantes telles que l’insertion, la suppression et la récupération. TKey spécifie le type de clé, et TValue définit le type de valeur associé. Explorons son utilisation :

Création et remplissage d’un dictionnaire :


// Créer un dictionnaire pour stocker des chaînes de caractères comme clés et des entiers comme valeurs.
Dictionary<string, int> myDictionary = new Dictionary<string, int>();

// Ajouter des paires clé-valeur en utilisant Add()
myDictionary.Add("apple", 1);
myDictionary.Add("banana", 2);
myDictionary.Add("cherry", 3);

// Ou utiliser la syntaxe d'initialiseur de collection :
Dictionary<string, int> anotherDictionary = new Dictionary<string, int>()
{
    {"grape", 4},
    {"orange", 5}
};

Accès aux valeurs :

Récupérez les valeurs en utilisant leurs clés. TryGetValue() est plus sûr que l’indexation directe, gérant les cas où la clé est absente :


int appleCount;
if (myDictionary.TryGetValue("apple", out appleCount))
{
    Console.WriteLine($"Nombre de pommes : {appleCount}"); // Sortie : Nombre de pommes : 1
}
else
{
    Console.WriteLine("Pomme non trouvée.");
}

// Accès direct (lance une KeyNotFoundException si la clé est manquante)
try
{
    Console.WriteLine($"Nombre de bananes : {myDictionary["banana"]}"); // Sortie : Nombre de bananes : 2
}
catch (KeyNotFoundException)
{
    Console.WriteLine("Clé non trouvée.");
}

Itération sur un dictionnaire :


Console.WriteLine("Contenu du dictionnaire :");
foreach (KeyValuePair<string, int> kvp in myDictionary)
{
    Console.WriteLine($"Clé : {kvp.Key}, Valeur : {kvp.Value}");
}

Suppression d’éléments :


myDictionary.Remove("banana"); 

Vérification de l’existence d’une clé :


if (myDictionary.ContainsKey("cherry"))
{
    Console.WriteLine("Cerise existe.");
}

Utilisation avancée et considérations

Pour les scénarios nécessitant la sécurité des threads, considérez ConcurrentDictionary<TKey, TValue>. Lors du choix des clés, assurez-vous qu’elles implémentent correctement GetHashCode() et Equals() pour éviter les collisions et maintenir l’efficacité de la hash map. La compréhension de ces aspects est cruciale pour des performances optimales.

Conclusion

Dictionary<TKey, TValue> en C# est l’équivalent efficace d’une HashMap, offrant d’excellentes performances pour le stockage clé-valeur. Sa polyvalence, combinée à la disponibilité d’alternatives thread-safe, en fait une structure de données fondamentale pour diverses applications C#.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *