Usare Visual C# per usare l'insieme HashTable

Questo articolo illustra come usare la HashTable raccolta in Visual C#.

Versione originale del prodotto: Oggetto visivo C#
Numero KB originale: 309357

Riepilogo

Poiché l'hash elimina la necessità di una ricerca costosa dei dati per recuperare i dati, è possibile usare l'hash per recuperare in modo efficiente i dati. L'hash usa il valore della chiave stessa per individuare i dati.

Le librerie di classi di base offrono una HashTable classe definita nello System.Collections spazio dei nomi in modo che non sia necessario scrivere codice per le tabelle hash personalizzate.

Passaggi per compilare l'esempio

Una HashTable raccolta archivia una coppia (Key, Value) e usa per eseguire l'hash Key e ottenere il percorso di archiviazione. L'oggetto Key non è modificabile e non può avere voci duplicate in HashTable. Questo esempio usa diverse istanze di una classe semplice Person da archiviare in un HashTableoggetto . Il cognome viene usato come .Key

  1. Aprire Microsoft Visual Studio e creare un progetto applicazione Windows Forms in Visual C#. Form1 viene aggiunto al progetto per impostazione predefinita.

  2. In Esplora soluzioni fare clic con il pulsante destro del mouse sul nome del progetto, scegliere Aggiungi e quindi selezionare Classe per aggiungere un modulo di classe. Class1 viene aggiunto al progetto per impostazione predefinita.

  3. Sostituire qualsiasi codice nel Class1 modulo con il codice seguente:

    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 ha un costruttore che accetta i FirstName parametri e LastName e assegna questi parametri alle variabili locali. La ToString funzione esegue l'override ToString dalla Object classe per restituire Fname e Lname concatenare insieme.

  4. Creare un oggetto a livello Hashtable di modulo e dichiarare tre variabili di tipo Person. Aggiungere il codice seguente alla 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. Nei passaggi seguenti usare il Add metodo dell'oggetto Hashtable per aggiungere tre Person oggetti a Hashtable in un try-catch blocco . Il try-catch blocco intercetta l'eccezione e visualizza un messaggio se sono presenti chiavi duplicate:

    1. Posizionare un controllo Button in Form1 e modificare la proprietà Text in Aggiungi elementi.

    2. Fare doppio clic sul pulsante per aprire la finestra Codice e incollare il codice seguente nell'evento 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'oggetto Hashtable fornisce un indicizzatore. Nei passaggi seguenti indicizza con Key per accedere al valore archiviato nella posizione con hash:

    1. Aggiungere un controllo Button a Form1 e modificare la proprietà Name in Recupera elementi.

    2. Fare doppio clic sul pulsante e incollare il codice seguente nell'evento 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. Nei passaggi seguenti usare il Remove metodo per rimuovere un singolo elemento dalla HashTable raccolta:

    1. Aggiungere un controllo Button a Form1 e modificare la proprietà Text in Remove Item.Add a Button control to Form1, and change the Text property to Remove Item.

    2. Fare doppio clic sul pulsante e incollare il codice seguente nell'evento 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. Nei passaggi seguenti enumerare gli elementi archiviati nella HashTable raccolta:

    1. Aggiungere un controllo Button a Form1 e modificare la proprietà Text in Enumerate.

    2. Fare doppio clic sul pulsante e incollare il codice seguente nell'evento 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?>
      

      Questo codice dichiara una variabile di tipo IDictionaryEnumerator e chiama il GetEnumerator metodo della HashTable raccolta. Con l'oggetto Enumerator restituito, il codice enumera gli elementi nella raccolta e usa il Keys metodo di HashTable per enumerare le chiavi.

  9. Nei passaggi seguenti usare il Clear metodo per cancellare :HashTable

    1. Aggiungere un controllo Button a Form1 e modificare la proprietà Text in Clear.Add a Button control to Form1, and change the Text property to Clear.

    2. Fare doppio clic sul pulsante e incollare il codice seguente nell'evento Button5_Click :

      MyTable.Clear();
      MessageBox.Show("HashTable is now empty");
      
  10. Seguire questa procedura per compilare ed eseguire l'applicazione:

    1. Selezionare Aggiungi elementi. All'insieme HashTable vengono aggiunti tre Person oggetti .
    2. Selezionare Recupera elementi. L'indicizzatore ottiene gli elementi nell'insieme HashTable . Vengono visualizzati i tre elementi appena aggiunti.
    3. Selezionare Rimuovi elemento. L'elemento nella posizione della Burris chiave viene eliminato.
    4. Selezionare Enumera. IDictionaryEnumerator enumera gli elementi dell'insieme HashTable e la Keys proprietà di HashTable restituisce un insieme Keys.
    5. Selezionare Cancella. Tutti gli elementi vengono cancellati dalla HashTable raccolta.

Nota

Le aziende, le organizzazioni, i prodotti, i nomi di dominio, gli indirizzi di posta elettronica, i logo, le persone, i luoghi e gli eventi di esempio illustrati qui sono fittizi. Nessuna associazione con società, organizzazione, prodotto, nome di dominio, indirizzo di posta elettronica, logo, persona, luoghi o eventi reali è prevista o deve essere dedotta.