Condividi tramite


Usare Visual C# per usare la raccolta HashTable

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

Versione originale del prodotto: Visual C#
Numero KB originale: 309357

Riepilogo

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

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

Passaggi per compilare l'esempio

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

  1. Aprire Microsoft Visual Studio e creare un progetto applicazione Windows Form 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 utilizzare 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 esistono chiavi duplicate:

    1. Posizionare un controllo Pulsante 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 indicizzare con per Key accedere al valore archiviato nel percorso 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 Rimuovi elemento.

    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.Add a Button control to Form1, and change the Text property to 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.

    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 nella HashTable raccolta. Vengono visualizzati i tre nuovi elementi aggiunti.
    3. Selezionare Rimuovi elemento. L'elemento nella posizione della Burris chiave viene eliminato.
    4. Selezionare Enumerazione. 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 dall'insieme HashTable .

Note

Le società, le organizzazioni, i prodotti, i nomi di dominio, gli indirizzi di posta elettronica, i loghi, le persone, i luoghi e gli eventi di esempio qui riportati sono fittizi. Nessuna associazione con nessuna società, organizzazione, prodotto, nome di dominio, indirizzo di posta elettronica, logo, persona, luogo o evento è intenzionale o può essere presupposta.