Verwenden von Visual C# zum Arbeiten mit der HashTable-Auflistung
In diesem Artikel wird die Verwendung der HashTable Sammlung in Visual C# erläutert.
Originalversion des Produkts: Visual C #
Ursprüngliche KB-Nummer: 309357
Zusammenfassung
Da hashing die Notwendigkeit für die kostspielige Suche von Daten zum Abrufen der Daten eliminiert, können Sie Hashing verwenden, um Daten effizient abzurufen. Hashing verwendet den Wert des Schlüssels selbst, 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 das Key zum Hashen und Abrufen des Speicherorts. Das Key Element ist unveränderlich und kann keine doppelten Einträge in der HashTable. In diesem Beispiel werden mehrere Instanzen einer einfachen Person Klasse zum Speichern in einem HashTable. Der Nachname wird als Key.
Ö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 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.
Class1wird dem Projekt standardmäßig hinzugefügt.Ersetzen Sie den Code im
Class1Modul 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
PersonKlasse verfügt über einen Konstruktor, der dieFirstNameParameter undLastNamedie Parameter übernimmt und diese Parameter den lokalen Variablen zuweist. DieToStringFunktion überschreibtToStringdieObjectKlasse, die zurückgegebenFnameundLnamemiteinander verkettet werden soll.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
AddMethode desHashtableObjekts, um dem Objekt in einemtry-catchBlock dreiPersonObjekteHashtablehinzuzufügen. Dertry-catchBlock fängt die Ausnahme ab und zeigt eine Meldung an, wenn doppelte Schlüssel vorhanden sind:Platzieren Sie ein Schaltflächensteuerelement in 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_ClickEreignis 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
HashtableObjekt stellt einen Indexer bereit. In den folgenden Schritten indizieren Sie den Wert, derKeyam Hashspeicherort gespeichert ist:Fügen Sie formular1 ein Schaltflächensteuerelement hinzu, und ändern Sie die Eigenschaft "Name " in " Elemente abrufen".
Doppelklicken Sie auf die Schaltfläche, und fügen Sie den folgenden Code in das
Button2_ClickEreignis 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
RemoveMethode, um ein einzelnes Element aus derHashTableAuflistung zu entfernen:Fügen Sie formular1 ein Schaltflächensteuerelement 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_ClickEreignis 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?>
Führen Sie in den folgenden Schritten die Elemente auf, die in der
HashTableAuflistung gespeichert sind:Fügen Sie form1 ein Schaltflächensteuerelement hinzu, und ändern Sie die Text-Eigenschaft in "Aufzählen".
Doppelklicken Sie auf die Schaltfläche, und fügen Sie den folgenden Code in das
Button4_ClickEreignis 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
IDictionaryEnumeratorund ruft dieGetEnumeratorMethode derHashTableAuflistung auf. Mit demEnumeratorZurückgegebenen durchläuft der Code die Elemente in der Auflistung und verwendet dieKeysMethode derHashTableAufzählung durch die Schlüssel.
Verwenden Sie in den folgenden Schritten die
ClearMethode, um FolgendesHashTablezu löschen:Fügen Sie formular1 ein Schaltflächensteuerelement hinzu, und ändern Sie die Text-Eigenschaft in "Löschen".
Doppelklicken Sie auf die Schaltfläche, und fügen Sie den folgenden Code in das
Button5_ClickEreignis 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
PersonObjekte hinzugefügtHashTable. - Wählen Sie "Elemente abrufen" aus. Der Indexer ruft die Elemente in der
HashTableAuflistung ab. Die drei neu hinzugefügten Elemente werden angezeigt. - Wählen Sie "Element entfernen" aus. Das Element am
BurrisSchlüsselspeicherort wird gelöscht. - Wählen Sie "Aufzählen" aus.
IDictionaryEnumeratorenumerates through the items in theHashTablecollection, and theKeysproperty of theHashTablereturns a Keys Collection. - Wählen Sie "Löschen" aus. Alle Elemente werden aus der
HashTableAuflistung 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 frei erfunden. Es ist keine Zuordnung zu einem echten Unternehmen, einer Organisation, einem Produkt, einem Domänennamen, einer E-Mail-Adresse, einem Logo, einer Person, Orten oder Ereignissen vorgesehen oder sollte abgeleitet werden.