Usare Visual C# per usare l'insieme HashTable
Questo articolo illustra come usare la HashTable
raccolta in Visual C#.
Versione originale del prodotto: Oggetto visivo C#
Numero KB originale: 309357
Riepilogo
Poiché l'hash elimina la necessità di una ricerca costosa dei dati per recuperare i dati, è possibile usare l'hash per recuperare in modo efficiente i dati. L'hash usa il valore della chiave stessa per individuare i dati.
Le librerie di classi di base offrono una HashTable
classe definita nello System.Collections
spazio dei nomi in modo che non sia necessario scrivere codice per le tabelle hash personalizzate.
Passaggi per compilare l'esempio
Una HashTable
raccolta archivia una coppia (Key
, Value
) e usa per eseguire l'hash Key
e ottenere il percorso di archiviazione. L'oggetto Key
non è modificabile e non può avere voci duplicate in HashTable
. Questo esempio usa diverse istanze di una classe semplice Person
da archiviare in un HashTable
oggetto . Il cognome viene usato come .Key
Aprire Microsoft Visual Studio e creare un progetto applicazione Windows Forms 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.
Class1
viene aggiunto al progetto per impostazione predefinita.Sostituire qualsiasi codice nel
Class1
modulo 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
Person
classe ha un costruttore che accetta iFirstName
parametri eLastName
e assegna questi parametri alle variabili locali. LaToString
funzione esegue l'overrideToString
dallaObject
classe per restituireFname
eLname
concatenare insieme.Creare un oggetto a livello
Hashtable
di 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 usare il
Add
metodo dell'oggettoHashtable
per aggiungere trePerson
oggetti aHashtable
in untry-catch
blocco . Iltry-catch
blocco intercetta l'eccezione e visualizza un messaggio se sono presenti chiavi duplicate:Posizionare un controllo Button 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
Hashtable
fornisce un indicizzatore. Nei passaggi seguenti indicizza conKey
per accedere al valore archiviato nella posizione 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
Remove
metodo per rimuovere un singolo elemento dallaHashTable
raccolta:Aggiungere un controllo Button a Form1 e modificare la proprietà Text in Remove Item.Add a Button control to Form1, and change the Text property to Remove Item.
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
HashTable
raccolta:Aggiungere un controllo Button a Form1 e modificare la proprietà Text in 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
IDictionaryEnumerator
e chiama ilGetEnumerator
metodo dellaHashTable
raccolta. Con l'oggettoEnumerator
restituito, il codice enumera gli elementi nella raccolta e usa ilKeys
metodo diHashTable
per enumerare le chiavi.
Nei passaggi seguenti usare il
Clear
metodo per cancellare :HashTable
Aggiungere un controllo Button a Form1 e modificare la proprietà Text in Clear.Add a Button control to Form1, and change the Text property to 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
HashTable
vengono aggiunti trePerson
oggetti . - Selezionare Recupera elementi. L'indicizzatore ottiene gli elementi nell'insieme
HashTable
. Vengono visualizzati i tre elementi appena aggiunti. - Selezionare Rimuovi elemento. L'elemento nella posizione della
Burris
chiave viene eliminato. - Selezionare Enumera.
IDictionaryEnumerator
enumera gli elementi dell'insiemeHashTable
e laKeys
proprietà diHashTable
restituisce un insieme Keys. - Selezionare Cancella. Tutti gli elementi vengono cancellati dalla
HashTable
raccolta.
- Selezionare Aggiungi elementi. All'insieme
Nota
Le aziende, le organizzazioni, i prodotti, i nomi di dominio, gli indirizzi di posta elettronica, i logo, le persone, i luoghi e gli eventi di esempio illustrati qui sono fittizi. Nessuna associazione con società, organizzazione, prodotto, nome di dominio, indirizzo di posta elettronica, logo, persona, luoghi o eventi reali è prevista o deve essere dedotta.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per