Freigeben über


Verwenden von Visual C# zum Arbeiten mit der HashTable-Auflistung

In diesem Artikel wird die Verwendung der HashTable Auflistung in Visual C# erläutert.

Originalproduktversion: Visual C#
Ursprüngliche KB-Nummer: 309357

Zusammenfassung

Da hashing die Notwendigkeit einer kostspieligen Datensuche zum Abrufen der Daten beseitigt, können Sie Hashing verwenden, um Daten effizient abzurufen. Beim Hashing wird der Wert des Schlüssels selbst verwendet, um die Daten zu finden.

Die Basisklassenbibliotheken bieten eine HashTable Klasse, die System.Collections im Namespace definiert ist, sodass Sie keine eigenen Hashtabellen codieren müssen.

Schritte zum Erstellen des Beispiels

Eine HashTable Sammlung speichert ein (Key, Value) Paar und verwendet den Key Hash und ruft den Speicherort ab. Dies Key ist unveränderlich und kann keine doppelten Einträge in der HashTableDatei enthalten. In diesem Beispiel werden mehrere Instanzen einer einfachen Person Klasse zum Speichern in einer HashTable. Der Nachname wird als Key.

  1. Öffnen Sie Microsoft Visual Studio, und erstellen Sie ein Windows Forms-Anwendungsprojekt in Visual C#. Form1 wird dem Projekt standardmäßig hinzugefügt.

  2. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf den Projektnamen, zeigen Sie auf "Hinzufügen", und wählen Sie dann "Klasse" aus, um ein Klassenmodul hinzuzufügen. Class1 wird dem Projekt standardmäßig hinzugefügt.

  3. Ersetzen Sie einen beliebigen Code im Class1 Modul durch den folgenden Code:

    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;
        }
    }
    

    Die Person Klasse verfügt über einen Konstruktor, der die FirstName Parameter verwendet LastName und diese Parameter den lokalen Variablen zuweist. Die ToString Funktion überschreibt ToString die Object Klasse, die zurückgegeben Fname und Lname verkettet werden soll.

  4. Erstellen Sie ein Objekt auf Formularebene Hashtable , und deklarieren Sie drei Variablen vom Typ Person. Fügen Sie der Form1-Klasse folgenden Code hinzu:

    <?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. Verwenden Sie in den folgenden Schritten die Add Methode des Hashtable Objekts, um dem Hashtable in einem try-catch Block drei Person Objekte hinzuzufügen. Der try-catch Block fängt die Ausnahme ab und zeigt eine Meldung an, wenn doppelte Schlüssel vorhanden sind:

    1. Platzieren Sie ein Schaltflächen-Steuerelement in Form1, und ändern Sie die Text-Eigenschaft in " Elemente hinzufügen".

    2. Doppelklicken Sie auf die Schaltfläche, um das Codefenster zu öffnen, und fügen Sie den folgenden Code in das Button1_Click Ereignis ein:

      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. Das Hashtable Objekt stellt einen Indexer bereit. In den folgenden Schritten indexieren Sie den Zugriff auf den Key Wert, der am Hashspeicherort gespeichert ist:

    1. Fügen Sie form1 ein Schaltflächen-Steuerelement hinzu, und ändern Sie die Eigenschaft "Name " in " Elemente abrufen".

    2. Doppelklicken Sie auf die Schaltfläche, und fügen Sie den folgenden Code in das Button2_Click Ereignis ein:

      //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. Verwenden Sie in den folgenden Schritten die Remove Methode, um ein einzelnes Element aus der HashTable Auflistung zu entfernen:

    1. Fügen Sie formular1 ein Schaltflächen-Steuerelement hinzu, und ändern Sie die Texteigenschaft in "Element entfernen".

    2. Doppelklicken Sie auf die Schaltfläche, und fügen Sie den folgenden Code in das Button3_Click Ereignis ein:

      <?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. Führen Sie in den folgenden Schritten die Elemente auf, die in der HashTable Auflistung gespeichert sind:

    1. Fügen Sie ein Schaltflächen-Steuerelement zu Form1 hinzu, und ändern Sie die Text-Eigenschaft in "Aufzählen".

    2. Doppelklicken Sie auf die Schaltfläche, und fügen Sie den folgenden Code in das Button4_Click Ereignis ein:

      <?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?>
      

      Dieser Code deklariert eine Variable vom Typ IDictionaryEnumerator und ruft die GetEnumerator Methode der HashTable Auflistung auf. Mit dem Enumerator zurückgegebenen Element listet der Code die Elemente in der Auflistung auf und verwendet die Keys Methode der HashTable Aufzählung durch die Tasten.

  9. Verwenden Sie in den folgenden Schritten die Clear Methode, um folgendes HashTablezu löschen:

    1. Fügen Sie ein Schaltflächen-Steuerelement zu Form1 hinzu, und ändern Sie die Texteigenschaft in "Löschen".

    2. Doppelklicken Sie auf die Schaltfläche, und fügen Sie den folgenden Code in das Button5_Click Ereignis ein:

      MyTable.Clear();
      MessageBox.Show("HashTable is now empty");
      
  10. Führen Sie die folgenden Schritte aus, um die Anwendung zu erstellen und auszuführen:

    1. Wählen Sie "Elemente hinzufügen" aus. Der Auflistung werden drei Person Objekte hinzugefügt HashTable .
    2. Wählen Sie " Elemente abrufen" aus. Der Indexer ruft die Elemente in der HashTable Auflistung ab. Die drei neu hinzugefügten Elemente werden angezeigt.
    3. Wählen Sie "Element entfernen" aus. Das Element am Burris Schlüsselspeicherort wird gelöscht.
    4. Wählen Sie "Aufzählen " aus. IDictionaryEnumerator Listet die Elemente in der HashTable Auflistung auf, und die Keys Eigenschaft der HashTable Rückgabe einer Keys-Auflistung.
    5. Wählen Sie Löschen aus. Alle Elemente werden aus der HashTable Auflistung gelöscht.

Notiz

Die in den Beispielen genannten Unternehmen, Organisationen, Produkte, Domänennamen, E-Mail-Adressen, Logos, Personen, Orte und Ereignisse sind frei erfunden. Jede Ähnlichkeit mit tatsächlichen Firmen, Organisationen, Produkten, Domänen, Personen, Orten, Ereignissen, E-Mail-Adressen und Logos ist rein zufällig.