Arbeiten mit der HashTable-Auflistung in Visual C#

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 309357 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Im folgenden Artikel wird dieses Thema für Microsoft Visual Basic .NET behandelt: 307933.
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

In diesem Artikel wird Schritt für Schritt erklärt, wie die HashTable-Auflistung verwendet wird. Da durch Hashing die Notwendigkeit einer aufwendigen Datensuche entfällt, können Sie es zum effizienten Abrufen von Daten einsetzen. Beim Hashing wird der Wert des Schlüssels selbst zur Datensuche verwendet.

Die Basisklassenbibliotheken enthalten eine HashTable-Klasse, die im System.Collections-Namespace definiert ist, d. h., Sie müssen keine eigenen Hashtabellen codieren.

Schritte zum Erstellen des Beispiels

Eine HashTable-Auflistung speichert ein (Schlüssel, Wert)-Paar und verwendet den Schlüssel für das Hashing und das Abrufen der Speicheradresse. Der Schlüssel ist unveränderlich und kann keine doppelten Einträge in der HashTable haben. In diesem Beispiel werden mehrere Instanzen einer einfachen Person-Klasse zur Speicherung in einer HashTable verwendet. Der Nachname wird als Schlüssel verwendet.
  1. Starten Sie Microsoft Visual Studio, und erstellen Sie ein neues Windows Forms-Anwendungsprojekt in Visual C#. Dem Projekt wird standardmäßig "Form1" hinzugefügt.
  2. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektnamen, zeigen Sie auf Hinzufügen, und klicken Sie auf Klasse, um ein Klassenmodul hinzuzufügen. "Class1" wird standardmäßig zum Projekt hinzugefügt.
  3. Ersetzen Sie den Code im Class1-Modul durch folgenden Code:
     public class Person
    {
    	public string Fname, Lname;
    
    	public Person(string FirstName, string LastName)
    	{
    		Fname = FirstName;
    		Lname = LastName;
    	}
    
    	public override string ToString()
    	{
    		return Fname + " " + Lname;
    	}
    }
    						
    Die Person-Klasse hat einen Konstruktor, der die Parameter FirstName und LastName den lokalen Variablen zuordnet. Die Funktion ToString setzt ToString aus der Klasse Object außer Kraft, um Fname und Lname verkettet zurückzugeben.
  4. Erstellen Sie ein Hashtable-Objekt auf Formularebene, und deklarieren Sie drei Variablen des Typs Person. Fügen Sie in der Klasse "Form1" folgenden Code hinzu:
    <?xm-deletion_mark author="v-bobbid" time="20080711T172143-0800" data="private Hashtable MyTable = new Hashtable();
    		
    //Erstellen Sie der Einfachheit halber drei "Person"-Objekte, die zur HashTable-Auflistung hinzugefügt werden.
    
    Person Person1,Person2,Person3; "?><?xm-insertion_mark_start author="v-bobbid" time="20080711T172143-0800"?>System.Collections.Hashtable MyTable = new 
    System.Collections.Hashtable();
    
    //Erstellen Sie der Einfachheit halber drei "Person"-Objekte, die zur HashTable-Auflistung hinzugefügt werden.
    
    Person Person1,Person2,Person3; 
    <?xm-insertion_mark_end?>
    					
  5. Verwenden Sie in den folgenden Schritten die Methode Add des Hashtable-Objekts, um drei Person-Objekte in einem Try-Catch-Block zum HashTable-Objekt hinzuzufügen. Der Try-Catch-Block fängt die Ausnahme ab und zeigt eine Meldung an, wenn es doppelte Schlüssel gibt.
    1. Versehen Sie "Form1" mit einem Button-Steuerelement, und ändern Sie die Eigenschaft Text in Elemente hinzufügen.
    2. Doppelklicken Sie auf die Schaltfläche, um das Codefenster zu öffnen, und fügen Sie folgenden Code im Ereignis Button1_Click ein:
      Person1 = new Person("David", "Burris");
      Person2 = new Person("Johnny", "Carrol");
      Person3 = new Person("Ji", "Jihuang");
      
      //Die Methode "Add" übernimmt den Schlüssel als ersten und den Wert als zweiten Parameter.
      
      try
      {
              MyTable.Add(Person1.Lname, Person1);
      	MyTable.Add(Person2.Lname, Person2);
      	MyTable.Add(Person3.Lname, Person3);
      				
      }
      catch (ArgumentException ae)
      {
      	MessageBox.Show("Doppelter Schlüssel");
      	MessageBox.Show(ae.Message);
      }
      						
  6. Das Hashtable-Objekt bietet einen Indexer. Verwenden Sie in den folgenden Schritten den Schlüssel zur Indizierung, um auf den Wert zuzugreifen, der an der hashcodierten Adresse gespeichert ist.
    1. Versehen Sie "Form1" mit einem Button-Steuerelement, und ändern Sie die Eigenschaft Name in Elemente abrufen.
    2. Doppelklicken Sie auf die Schaltfläche und fügen Sie folgenden Code im Ereignis Button2_Click ein:
      //Verwenden Sie den Indexer der "Hashtable"-Klasse zum Abrufen Ihrer Objekte. Der Indexer übernimmt 
      //den Schlüssel als Parameter und greift mit der hashcodierten Adresse darauf zu.
      
      try
      {
              MessageBox.Show(MyTable[Person1.Lname].ToString());
      	MessageBox.Show(MyTable[Person2.Lname].ToString());
      	MessageBox.Show(MyTable[Person3.Lname].ToString());
      }
      catch (NullReferenceException ex)
      {
      	MessageBox.Show("Schlüssel nicht in der Hashtabelle");
      	MessageBox.Show(ex.Message);
      } 
      						
  7. Verwenden Sie in den folgenden Schritten die Methode Remove, um ein einzelnes Element aus der HashTable-Auflistung zu entfernen:
    1. Versehen Sie "Form1" mit einem Button-Steuerelement, und ändern Sie die Eigenschaft Text in Element entfernen.
    2. Doppelklicken Sie auf die Schaltfläche und fügen Sie folgenden Code im Ereignis Button3_Click ein:
      <?xm-deletion_mark author="v-bobbid" time="20080711T173011-0800" data="if (MyTable.Count == 0) 
      {
      	MessageBox.Show(&quot;Es sind keine Elemente in der Hashtabelle vorhanden&quot;);
      }
      else
      {
              MessageBox.Show(&quot;Die Anzahl vor dem Entfernen eines Elements beträgt&quot; + &quot; &quot; + MyTable.Count);
              MessageBox.Show(&quot;Der bei Schlüsselwert (Burris) gespeicherte Wert wird entfernt&quot;);
              Entfernen des bei Schlüsselwert Person1.Lname gespeicherten Objekts.
              MyTable.Remove(Person1.Lname);
      }"?><?xm-insertion_mark_start author="v-bobbid" time="20080711T173011-0800"?>if (MyTable.Count == 0) 
      {
          MessageBox.Show("Es sind keine Elemente in der Hashtabelle vorhanden");
      }
      else
      {
              MessageBox.Show("Die Anzahl vor dem Entfernen eines Elements beträgt" + " " + MyTable.Count);
              MessageBox.Show("Der bei Schlüsselwert (Burris) gespeicherte Wert wird entfernt");
              // Entfernen des bei Schlüsselwert Person1.Lname gespeicherten Objekts.
              MyTable.Remove(Person1.Lname);
      } 
      <?xm-insertion_mark_end?>
      						
  8. Listen Sie in den folgenden Schritten die Elemente auf, die in der HashTable-Auflistung gespeichert sind.
    1. Versehen Sie "Form1" mit einem Button-Steuerelement, und ändern Sie die Eigenschaft Text in Auflisten.
    2. Doppelklicken Sie auf die Schaltfläche und fügen Sie folgenden Code im Ereignis Button4_Click ein:
      <?xm-deletion_mark author="v-bobbid" time="20080711T174252-0800" data="IDictionaryEnumerator Enumerator;
      
      if (MyTable.Count == 0)
      	MessageBox.Show(&quot;Die Hashtabelle ist leer&quot;);
      else
      {
      	MessageBox.Show(&quot;Auflisten über Hashtable-Auflistung&quot;);
      	Enumerator = MyTable.GetEnumerator();
              
              while (Enumerator.MoveNext())
      	{
      	        MessageBox.Show(Enumerator.Value.ToString());
      	}
      }
      
      ICollection MyKeys;
           
      
      if (MyTable.Count == 0) 
             MessageBox.Show(&quot;Die Hashtabelle ist leer&quot;);
      else
      {
             MessageBox.Show(&quot;Zugriff auf Schlüsseleigenschaft, um Schlüsselauflistung zurückzugeben&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("Die Hashtabelle ist leer");
      else
      {
          MessageBox.Show("Auflisten über Hashtable-Auflistung");
          Enumerator = MyTable.GetEnumerator();
      
          while (Enumerator.MoveNext())
          {
              MessageBox.Show(Enumerator.Value.ToString());
          }
      }
      
      System.Collections.ICollection MyKeys;
      
      
      if (MyTable.Count == 0)
          MessageBox.Show("Die Hashtabelle ist leer");
      else
      {
          MessageBox.Show("Zugriff auf Schlüsseleigenschaft, um Schlüsselauflistung zurückzugeben");
          MyKeys = MyTable.Keys;
      
          foreach (object Key in MyKeys)
          {
              MessageBox.Show(Key.ToString());
          }
      }  
      <?xm-insertion_mark_end?>
      Dieser Code deklariert eine Variable des Typs IDictionaryEnumerator und ruft die GetEnumerator-Methode der HashTable-Auflistung auf. Wenn der Enumerator zurückgegeben wird, zählt der Code die Elemente in der Auflistung auf und verwendet die Keys-Methode des HashTable-Objekts für die Aufzählung der Schlüssel.
  9. Verwenden Sie in den folgenden Schritten die Methode Clear, um den Inhalt des HashTable-Objekts zu löschen:
    1. Versehen Sie "Form1" mit einem Button-Steuerelement, und ändern Sie die Eigenschaft Text in Löschen.
    2. Doppelklicken Sie auf die Schaltfläche und fügen Sie folgenden Code im Ereignis Button5_Click ein:
      MyTable.Clear();
            MessageBox.Show("Die Hashtabelle ist jetzt leer");
      						
  10. Gehen Sie folgendermaßen vor, um die Anwendung zu erstellen und auszuführen:
    1. Klicken Sie auf Elemente hinzufügen. Drei Person-Objekte werden zur HashTable-Auflistung hinzugefügt.
    2. Klicken Sie auf Elemente abrufen. Der Indexer ermittelt die Elemente in der HashTable-Auflistung. Die drei neu hinzugefügten Elemente werden angezeigt.
    3. Klicken Sie auf Element entfernen. Das Element am Schlüsselspeicherort "Burris" wird gelöscht.
    4. Klicken Sie auf Auflisten. Beachten Sie, dass IDictionaryEnumerator die Elemente in der HashTable-Auflistung aufzählt, und die Keys-Eigenschaft von HashTable eine Schlüsselauflistung zurückgibt.
    5. Klicken Sie auf Löschen. Alle Elemente werden aus der HashTable-Auflistung entfernt.
Hinweis Die hier verwendeten Beispiele für Unternehmen, Organisationen, Produkte, Domänennamen, E-Mail-Adressen, Logos, Personen, Orte und Ereignisse sind frei erfunden. Ein Bezug auf echte Firmen, Organisationen, Produkte, Domänennamen, E-Mail-Adressen, Logos, Personen, Orte oder Ereignisse ist nicht beabsichtigt oder ableitbar.

Eigenschaften

Artikel-ID: 309357 - Geändert am: Dienstag, 29. Dezember 2009 - Version: 4.0
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Visual C# 2008 Express Edition
  • Microsoft Visual C# 2005
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
Keywords: 
kbhowtomaster KB309357
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com