Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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.
Aprire Microsoft Visual Studio e creare un progetto applicazione Windows Form in Visual C#. Form1 viene aggiunto al progetto per impostazione predefinita.
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.
Class1viene aggiunto al progetto per impostazione predefinita.Sostituire qualsiasi codice nel
Class1modulo 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
Personclasse ha un costruttore che accetta iFirstNameparametri eLastNamee assegna questi parametri alle variabili locali. LaToStringfunzione esegue l'overrideToStringdallaObjectclasse per restituireFnameeLnameconcatenare insieme.Creare un oggetto a livello
Hashtabledi modulo e dichiarare tre variabili di tipoPerson. Aggiungere il codice seguente alla classeForm1:<?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?>Nei passaggi seguenti utilizzare il
Addmetodo dell'oggettoHashtableper aggiungere trePersonoggetti aHashtablein untry-catchblocco. Iltry-catchblocco intercetta l'eccezione e visualizza un messaggio se esistono chiavi duplicate:Posizionare un controllo Pulsante in Form1 e modificare la proprietà Text in Aggiungi elementi.
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); }
L'oggetto
Hashtablefornisce un indicizzatore. Nei passaggi seguenti indicizzare con perKeyaccedere al valore archiviato nel percorso con hash:Aggiungere un controllo Button a Form1 e modificare la proprietà Name in Recupera elementi.
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); }
Nei passaggi seguenti usare il
Removemetodo per rimuovere un singolo elemento dallaHashTableraccolta:Aggiungere un controllo Button a Form1 e modificare la proprietà Text in Rimuovi elemento.
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("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?>
Nei passaggi seguenti enumerare gli elementi archiviati nella
HashTableraccolta: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.
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("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?>Questo codice dichiara una variabile di tipo
IDictionaryEnumeratore chiama ilGetEnumeratormetodo dellaHashTableraccolta. Con l'oggettoEnumeratorrestituito, il codice enumera gli elementi nella raccolta e usa ilKeysmetodo diHashTableper enumerare le chiavi.
Nei passaggi seguenti usare il
Clearmetodo per cancellare :HashTableAggiungere un controllo Button a Form1 e modificare la proprietà Text in Clear.
Fare doppio clic sul pulsante e incollare il codice seguente nell'evento
Button5_Click:MyTable.Clear(); MessageBox.Show("HashTable is now empty");
Seguire questa procedura per compilare ed eseguire l'applicazione:
- Selezionare Aggiungi elementi. All'insieme
HashTablevengono aggiunti trePersonoggetti. - Selezionare Recupera elementi. L'indicizzatore ottiene gli elementi nella
HashTableraccolta. Vengono visualizzati i tre nuovi elementi aggiunti. - Selezionare Rimuovi elemento. L'elemento nella posizione della
Burrischiave viene eliminato. - Selezionare Enumerazione.
IDictionaryEnumeratorenumera gli elementi dell'insiemeHashTablee laKeysproprietà diHashTablerestituisce un insieme Keys. - Selezionare Cancella. Tutti gli elementi vengono cancellati dall'insieme
HashTable.
- Selezionare Aggiungi elementi. All'insieme
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.