Utiliser Visual C# pour travailler avec la collection HashTable

Cet article explique comment utiliser la HashTable collection dans Visual C#.

Version d’origine du produit : Visual C#
Numéro de la base de connaissances d’origine : 309357

Résumé

Étant donné que le hachage élimine la nécessité d’effectuer des recherches coûteuses dans les données pour récupérer les données, vous pouvez utiliser le hachage pour récupérer efficacement les données. Le hachage utilise la valeur de la clé elle-même pour localiser les données.

Les bibliothèques de classes de base offrent une HashTable classe définie dans l’espace System.Collections de noms afin que vous ne soyez pas obligé de coder vos propres tables de hachage.

Étapes de génération de l’exemple

Une HashTable collection stocke une paire (Key, Value) et utilise pour Key hacher et obtenir l’emplacement de stockage. est Key immuable et ne peut pas avoir d’entrées en double dans .HashTable Cet exemple utilise plusieurs instances d’une classe simple Person pour stocker dans un HashTable. Le nom est utilisé comme Key.

  1. Ouvrez Microsoft Visual Studio et créez un projet d’application Windows Forms en Visual C#. Form1 est ajouté au projet par défaut.

  2. Dans Explorateur de solutions, cliquez avec le bouton droit sur le nom du projet, pointez sur Ajouter, puis sélectionnez Classe pour ajouter un module de classe. Class1 est ajouté au projet par défaut.

  3. Remplacez n’importe quel code du Class1 module par le code suivant :

    public class Person
    {
        public string Fname, Lname;d
        public Person (string FirstName, string LastName)
        {
            Fname = FirstName;
            Lname = LastName;
        }
        public override string ToString ()
        {
            return Fname + " " + Lname;
        }
    }
    

    La Person classe a un constructeur qui accepte les FirstName paramètres et et LastName affecte ces paramètres aux variables locales. La ToString fonction remplace ToString à partir de la Object classe pour retourner Fname et Lname concaténé ensemble.

  4. Créez un objet au niveau Hashtable du formulaire et déclarez trois variables de type Person. Ajoutez ce code à la classe Form1 :

    <?xm-deletion_mark author="v-bobbid" time="20080711T172143-0800"
    data="private Hashtable MyTable = new Hashtable();
    
    //For simplicity, create three Person objects to add to the HashTable collection.
    
    Person Person1,Person2,Person3; "?>
    <?xm-insertion_mark_start author="v-bobbid" time="20080711T172143-0800"?>
    System.Collections.Hashtable MyTable = new
    System.Collections.Hashtable();
    
    //For simplicity, create three Person objects to add to the HashTable collection.
    Person Person1,Person2,Person3;
    <?xm-insertion_mark_end?>
    
  5. Dans les étapes suivantes, utilisez la Add méthode de l’objet Hashtable pour ajouter trois Person objets au Hashtable dans un try-catch bloc. Le try-catch bloc intercepte l’exception et affiche un message s’il existe des clés en double :

    1. Placez un contrôle Button sur Form1 et remplacez la propriété Text par Ajouter des éléments.

    2. Double-cliquez sur le bouton pour ouvrir sa fenêtre Code, puis collez le code suivant dans l’événement Button1_Click :

      Person1 = new Person("David", "Burris");
      Person2 = new Person("Johnny", "Carrol");
      Person3 = new Person("Ji", "Jihuang");
      
      //The Add method takes Key as the first parameter and Value as the second parameter.
      
      try
      {
          MyTable.Add(Person1.Lname, Person1);
          MyTable.Add(Person2.Lname, Person2);
          MyTable.Add(Person3.Lname, Person3);
      }
      catch (ArgumentException ae)
      {
          MessageBox.Show("Duplicate Key");
          MessageBox.Show(ae.Message);
      }
      
  6. L’objet Hashtable fournit un indexeur. Dans les étapes suivantes, indexez avec pour Key accéder à la valeur stockée à l’emplacement haché :

    1. Ajoutez un contrôle Button à Form1 et remplacez la propriété Name par Obtenir des éléments.

    2. Double-cliquez sur le bouton et collez le code suivant dans l’événement Button2_Click :

      //Use the indexer of the Hashtable class to retrieve your objects. The indexer takes
      //Key as a parameter and accesses it with the Hashed location.
      try
      {
          MessageBox.Show(MyTable[Person1.Lname].ToString());
          MessageBox.Show(MyTable[Person2.Lname].ToString());
          MessageBox.Show(MyTable[Person3.Lname].ToString());
      }
      catch (NullReferenceException ex)
      {
          MessageBox.Show("Key not in Hashtable");
          MessageBox.Show(ex.Message);
      }
      
  7. Dans les étapes suivantes, utilisez la Remove méthode pour supprimer un seul élément de la HashTable collection :

    1. Ajoutez un contrôle Button à Form1 et remplacez la propriété Text par Supprimer l’élément.

    2. Double-cliquez sur le bouton et collez le code suivant dans l’événement Button3_Click :

      <?xm-deletion_mark author="v-bobbid" time="20080711T173011-0800" data="if (MyTable.Count == 0)
      {
          MessageBox.Show(&quot;There are no items in HashTable&quot;);
      }
      else
      {
          MessageBox.Show(&quot;The count before removing an Item is&quot; + &quot; &quot; + MyTable.Count);
          MessageBox.Show(&quot;Removing value stored at key value (Burris)&quot;);
          Remove the object that is stored at the Key value Person1.Lname.
          MyTable.Remove(Person1.Lname);
      }
      "?>
      <?xm-insertion_mark_start author="v-bobbid" time="20080711T173011-0800"?>if (MyTable.Count == 0)
      {
          MessageBox.Show("There are no items in HashTable");
      }
      else
      {
          MessageBox.Show("The count before removing an Item is" + " " + MyTable.Count);
          MessageBox.Show("Removing value stored at key value (Burris)");
          // Remove the object that is stored at the Key value Person1.Lname.
          MyTable.Remove(Person1.Lname);
      }
      <?xm-insertion_mark_end?>
      
  8. Dans les étapes suivantes, énumérez les éléments stockés dans la HashTable collection :

    1. Ajoutez un contrôle Button à Form1 et remplacez la propriété Text par Enumerate.

    2. Double-cliquez sur le bouton et collez le code suivant dans l’événement Button4_Click :

      <?xm-deletion_mark author="v-bobbid" time="20080711T174252-0800"
      data="IDictionaryEnumerator Enumerator;
      if (MyTable.Count == 0)
      MessageBox.Show(&quot;The hashtable is empty&quot;);
      else
      {
          MessageBox.Show(&quot;Enumerating through the Hashtable collection&quot;);
          Enumerator = MyTable.GetEnumerator();
      
          while (Enumerator.MoveNext())
          {
              MessageBox.Show(Enumerator.Value.ToString());
          }
      }
      
      ICollection MyKeys;
      
      if (MyTable.Count == 0)
       MessageBox.Show(&quot;The hashtable is empty&quot;);
      else
      {
          MessageBox.Show(&quot;Accessing keys property to return keys collection&quot;);
          MyKeys = MyTable.Keys;
      
          foreach (object Key in MyKeys)
          {
              MessageBox.Show(Key.ToString());
          }
      }
      "?>
      <?xm-insertion_mark_start author="v-bobbid" time="20080711T174252-0800"?>
      System.Collections.IDictionaryEnumerator Enumerator;
      
      if (MyTable.Count == 0)
          MessageBox.Show("The hashtable is empty");
      else
      {
          MessageBox.Show("Enumerating through the Hashtable collection");
          Enumerator = MyTable.GetEnumerator();
      
          while (Enumerator.MoveNext())
          {
              MessageBox.Show(Enumerator.Value.ToString());
          }
      }
      
      System.Collections.ICollection MyKeys;
      
      if (MyTable.Count == 0)
          MessageBox.Show("The hashtable is empty");
      else
      {
          MessageBox.Show("Accessing keys property to return keys collection");
          MyKeys = MyTable.Keys;
      
          foreach (object Key in MyKeys)
          {
              MessageBox.Show(Key.ToString());
          }
      }
      <?xm-insertion_mark_end?>
      

      Ce code déclare une variable de type IDictionaryEnumerator et appelle la GetEnumerator méthode de la HashTable collection. Avec le Enumerator retourné, le code énumère les éléments de la collection et utilise la Keys méthode de pour HashTable énumérer les clés.

  9. Dans les étapes suivantes, utilisez la Clear méthode pour effacer :HashTable

    1. Ajoutez un contrôle Button à Form1 et remplacez la propriété Text par Effacer.

    2. Double-cliquez sur le bouton et collez le code suivant dans l’événement Button5_Click :

      MyTable.Clear();
      MessageBox.Show("HashTable is now empty");
      
  10. Procédez comme suit pour générer et exécuter l’application :

    1. Sélectionnez Ajouter des éléments. Trois Person objets sont ajoutés à la HashTable collection.
    2. Sélectionnez Obtenir des éléments. L’indexeur obtient les éléments de la HashTable collection. Les trois éléments nouvellement ajoutés s’affichent.
    3. Sélectionnez Supprimer l’élément. L’élément à l’emplacement de la Burris clé est supprimé.
    4. Sélectionnez Énumérer. IDictionaryEnumerator énumère les éléments de la HashTable collection, et la Keys propriété de retourne HashTable une collection Keys.
    5. Sélectionnez Effacer. Tous les éléments sont effacés de la HashTable collection.

Remarque

Les exemples d’entreprises, d’organisations, de produits, de noms de domaine, d’adresses de messagerie, de logos, de personnes, de lieux et d’événements présentés ici sont fictifs. Aucune association avec une entreprise, un organization, un produit, un nom de domaine, une adresse e-mail, un logo, une personne, des lieux ou des événements réels n’est prévue ou ne doit être déduite.