Verwenden von Visual C# zum Arbeiten mit der HashTable-Auflistung
In diesem Artikel wird die Verwendung der HashTable
Sammlung in Visual C# vorgestellt.
Ursprüngliche Produktversion: Visual C#
Ursprüngliche KB-Nummer: 309357
Zusammenfassung
Da hashing die Notwendigkeit einer kostspieligen Suche von Daten zum Abrufen der Daten entfällt, 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
Auflistung speichert ein (Key
, Value
) -Paar und verwendet die Key
zum Hashen und Abrufen des Speicherorts. ist Key
unveränderlich und darf keine doppelten Einträge in enthalten HashTable
. In diesem Beispiel werden mehrere Instanzen einer einfachen Person
Klasse zum Speichern in einem HashTable
verwendet. Der Nachname wird als Key
verwendet.
Öffnen Sie Microsoft Visual Studio, und erstellen Sie ein Windows Forms Application-Projekt in Visual C#. Form1 wird dem Projekt standardmäßig hinzugefügt.
Klicken Sie 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.Ersetzen Sie den 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 dieFirstName
Parameter und akzeptiertLastName
und diese Parameter den lokalen Variablen zuweist. DieToString
-Funktion überschreibtToString
dieObject
-Klasse, um zurückzugebenFname
undLname
zusammen zu verketten.Erstellen Sie ein Objekt auf Formularebene
Hashtable
, und deklarieren Sie drei Variablen vom TypPerson
. Fügen Sie derForm1
-Klasse den 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?>
Verwenden Sie in den folgenden Schritten die
Add
-Methode desHashtable
-Objekts, um dem in einemtry-catch
-Block dreiPerson
-ObjekteHashtable
hinzuzufügen. Dertry-catch
-Block fängt die Ausnahme ab und zeigt eine Meldung an, wenn doppelte Schlüssel vorhanden sind:Platzieren Sie ein Button-Steuerelement auf Form1, und ändern Sie die Text-Eigenschaft in Elemente hinzufügen.
Doppelklicken Sie auf die Schaltfläche, um das zugehörige 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); }
Das
Hashtable
-Objekt stellt einen Indexer bereit. In den folgenden Schritten indexieren Sie mit ,Key
um auf den Wert zuzugreifen, der am Hashspeicherort gespeichert ist:Fügen Sie form1 ein Button-Steuerelement hinzu, und ändern Sie die Name-Eigenschaft in Elemente abrufen.
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); }
Verwenden Sie in den folgenden Schritten die
Remove
-Methode, um ein einzelnes Element aus derHashTable
Auflistung zu entfernen:Fügen Sie form1 ein Button-Steuerelement hinzu, und ändern Sie die Text-Eigenschaft in Element entfernen.
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("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_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?>
In den folgenden Schritten zählen Sie die Elemente auf, die in der
HashTable
Auflistung gespeichert sind:Fügen Sie form1 ein Button-Steuerelement hinzu, und ändern Sie die Text-Eigenschaft in Enumerate.
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("The hashtable is empty"); else { MessageBox.Show("Enumerating through the Hashtable collection"); Enumerator = MyTable.GetEnumerator(); while (Enumerator.MoveNext()) { MessageBox.Show(Enumerator.Value.ToString()); } } 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_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 dieGetEnumerator
-Methode derHashTable
Auflistung auf. Wenn derEnumerator
zurückgegeben wird, listet der Code die Elemente in der Auflistung auf und verwendet dieKeys
-Methode von ,HashTable
um die Schlüssel aufzulisten.
Verwenden Sie in den folgenden Schritten die
Clear
-Methode, um dieHashTable
zu löschen:Fügen Sie form1 ein Button-Steuerelement hinzu, und ändern Sie die Text-Eigenschaft in Clear.
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");
Führen Sie die folgenden Schritte aus, um die Anwendung zu erstellen und auszuführen:
- Wählen Sie Elemente hinzufügen aus. Der Auflistung werden drei
Person
-Objekte hinzugefügtHashTable
. - Wählen Sie Elemente abrufen aus. Der Indexer ruft die Elemente in der
HashTable
Auflistung ab. Die drei neu hinzugefügten Elemente werden angezeigt. - Wählen Sie Element entfernen aus. Das Element am
Burris
Schlüsselspeicherort wird gelöscht. - Wählen Sie Aufzählen aus.
IDictionaryEnumerator
listet die Elemente in derHashTable
Auflistung auf, und dieKeys
-Eigenschaft vonHashTable
gibt eine Keys-Auflistung zurück. - Wählen Sie Löschen aus. Alle Elemente werden aus der
HashTable
Auflistung gelöscht.
- Wählen Sie Elemente hinzufügen aus. Der Auflistung werden drei
Hinweis
Die hier dargestellten Beispielunternehmen, Organisationen, Produkte, Domänennamen, E-Mail-Adressen, Logos, Personen, Orte und Ereignisse sind fiktiv. Es ist keine Zuordnung mit echtem Unternehmen, organization, Produkt, Domänenname, E-Mail-Adresse, Logo, Person, Orten oder Ereignissen beabsichtigt oder sollte abgeleitet werden.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für