Comment obtenir les valeurs de la table de hachage en C#  ?

1 voir

En C#, pour accéder aux valeurs dune table de hachage, on vérifie dabord si une clé spécifique existe avec Contains(). Si Contains() renvoie true, cela confirme la présence de la clé. On peut alors récupérer sa valeur correspondante en utilisant cette clé comme index dans la table de hachage.

Commentez 0 J'aime

Extraire efficacement les valeurs d’une table de hachage en C

En C#, la table de hachage, représentée par la classe Hashtable, est une structure de données puissante pour stocker des paires clé-valeur. Si vous avez déjà alimenté votre table de hachage et que vous souhaitez récupérer ses valeurs, voici une méthode claire et efficace pour le faire, tout en évitant les erreurs potentielles.

L’approche fondamentale : Vérifier et Accéder

L’approche la plus courante et la plus sûre consiste à vérifier l’existence d’une clé avant d’essayer d’accéder à sa valeur. Cela évite les exceptions inutiles et rend votre code plus robuste.

using System.Collections;

public class ExempleHashtable
{
    public static void Main(string[] args)
    {
        // Création et initialisation d'une table de hachage
        Hashtable monTableauDeHachage = new Hashtable();
        monTableauDeHachage.Add("Nom", "Jean Dupont");
        monTableauDeHachage.Add("Age", 30);
        monTableauDeHachage.Add("Ville", "Paris");

        // Clé à rechercher
        string cleRecherchee = "Age";

        // Vérification de l'existence de la clé
        if (monTableauDeHachage.Contains(cleRecherchee))
        {
            // Accès à la valeur associée à la clé
            object valeur = monTableauDeHachage[cleRecherchee];

            // Affichage de la valeur (conversion nécessaire si le type est connu)
            Console.WriteLine($"La valeur associée à la clé '{cleRecherchee}' est : {valeur}");
            // Dans ce cas, on pourrait caster 'valeur' en int si on est sûr qu'il s'agit d'un entier:
            // int age = (int)valeur;
        }
        else
        {
            Console.WriteLine($"La clé '{cleRecherchee}' n'existe pas dans la table de hachage.");
        }

        // Exemple avec une clé inexistante
        cleRecherchee = "Profession";
        if (monTableauDeHachage.Contains(cleRecherchee))
        {
            object valeur = monTableauDeHachage[cleRecherchee];
            Console.WriteLine($"La valeur associée à la clé '{cleRecherchee}' est : {valeur}");
        }
        else
        {
            Console.WriteLine($"La clé '{cleRecherchee}' n'existe pas dans la table de hachage.");
        }
    }
}

Explication du Code:

  1. using System.Collections;: Importe l’espace de noms nécessaire pour utiliser la classe Hashtable.
  2. Création et Initialisation: Une instance de Hashtable est créée et remplie avec quelques paires clé-valeur.
  3. Vérification avec Contains(): La méthode Contains(clé) vérifie si la clé spécifiée existe dans la table de hachage. Elle retourne true si la clé est présente, et false sinon.
  4. Accès à la valeur avec [clé]: Si la clé existe (selon le résultat de Contains()), on peut accéder à sa valeur en utilisant la clé comme un index dans la table de hachage : monTableauDeHachage[cleRecherchee]. La valeur retournée est de type object, il est donc souvent nécessaire de la convertir (cast) vers le type approprié si vous le connaissez.
  5. Gestion de l’absence de clé: Une clause else gère le cas où la clé n’est pas trouvée, affichant un message approprié.

Alternatives et Considérations avancées :

  • Enumération des valeurs : Si vous souhaitez récupérer toutes les valeurs de la table de hachage, vous pouvez itérer sur la collection Values :

    foreach (object valeur in monTableauDeHachage.Values)
    {
        Console.WriteLine($"Valeur : {valeur}");
    }
  • Enumération des paires clé-valeur : Pour accéder à la fois aux clés et aux valeurs, vous pouvez itérer sur la collection Keys et utiliser les clés pour accéder aux valeurs, ou mieux, itérer sur la collection DictionaryEntry :

    foreach (DictionaryEntry paire in monTableauDeHachage)
    {
        Console.WriteLine($"Clé: {paire.Key}, Valeur: {paire.Value}");
    }
  • L’utilisation de TryGetValue() (plus moderne) : Pour les versions plus récentes du .NET Framework (et avec l’utilisation de Dictionary<TKey, TValue> au lieu de Hashtable), la méthode TryGetValue() est préférable. Elle combine la vérification et l’extraction en une seule opération :

    Dictionary<string, object> monDictionnaire = new Dictionary<string, object>(); // Exemple avec un dictionnaire
    monDictionnaire.Add("Nom", "Jean Dupont");
    
    object valeur;
    if (monDictionnaire.TryGetValue("Nom", out valeur))
    {
        Console.WriteLine($"Valeur : {valeur}");
    }
    else
    {
        Console.WriteLine("Clé non trouvée.");
    }

Pourquoi utiliser Contains() (ou TryGetValue()) ?

Accéder à une valeur avec [clé] alors que la clé n’existe pas dans la table de hachage lève une exception KeyNotFoundException. L’utilisation de Contains() (ou TryGetValue() avec Dictionary) permet d’éviter cette exception et de gérer élégamment les situations où la clé recherchée est absente.

Conclusion :

Manipuler les valeurs d’une table de hachage en C# est simple et efficace. L’approche recommandée est d’utiliser la méthode Contains() pour vérifier l’existence d’une clé avant d’accéder à sa valeur, garantissant ainsi la robustesse et la fiabilité de votre code. Pour les projets plus récents, la classe Dictionary<TKey, TValue> et la méthode TryGetValue() offrent une alternative plus performante et typée.