In questo articolo sono contenute informazioni sull'insieme HashTable. Poiché l'hash elimina la necessità di effettuare costose ricerche per recuperare i dati, è possibile servirsene per rendere più efficiente il recupero. L'hash impiega il valore della chiave in sé per individuare i dati.
Le librerie di classi base contengono una classe
HashTable, definita nello spazio dei nomi
System.Collections, con la quale non è necessario scrivere codice per le tabelle hash.
Procedura per compilare il progetto di esempio
Nell'insieme HashTable è memorizzata una coppia
(chiave, valore) e la
chiave viene utilizzata per l'hash e il recupero del percorso di archiviazione. La
chiave è immutabile e per essa non possono esistere voci duplicate in
HashTable. In questo esempio vengono impiegate varie istanze di una semplice classe
Person da memorizzare in una
HashTable. L'ultimo nome è utilizzato come
chiave.
-
Aprire Microsoft Visual Studio .NET e creare un nuovo progetto Applicazione Windows in Visual Basic .NET. In base all'impostazione predefinita verrà aggiunto al progetto il Form1.
-
In Esplora soluzioni fare clic con il pulsante destro del mouse sul nome del progetto, scegliere Aggiungi, quindi Aggiungi classe per aggiungere un modulo di classe. In base all'impostazione predefinita al progetto verrà aggiunto Class1.
-
Scegliere Apri nella finestra di dialogo Aggiungi nuovo elemento.
-
Sostituire il codice esistente nel modulo Class1 con il seguente codice:
Public Class Person
Public Fname, Lname As String
Sub New(ByVal FirstName As String, ByVal LastName As String)
Fname = FirstName
Lname = LastName
End Sub
Public Overrides Function ToString() As String
Return Fname + " " + Lname
End Function
End Class
La classe Person dispone di un costruttore che impiega i parametri FirstName e LastName e li assegna alle variabili locali. La funzione ToString esegue l'override di ToString della classe Object in modo che Fname e Lname vengano restituiti concatenati.
-
Aggiungere la seguente istruzione Imports in Form1.vb all'inizio del modulo di codice:
Imports System.Collections
-
Creare un oggetto Hashtable a livello di form e dichiarare tre variabili di tipo Person. Aggiungere alla classe Form1 il seguente codice:
Dim MyTable As New Hashtable()
'For simplicity, create three Person objects to add to the HashTable collection.
Dim Person1, Person2, Person3 As Person
-
Nella seguente procedura utilizzare il metodo Add dell'oggetto Hashtable per aggiungere tre oggetti Person a Hashtable in un blocco try-catch. Il blocco try-catch intercetta l'eccezione e visualizza un messaggio se esistono chiavi duplicate.
-
Posizionare un controllo Button sul Form1 e modificare la proprietà Text in
Aggiungi elementi.
-
Fare doppio clic sul pulsante per aprire la relativa finestra del codice, quindi incollare nell'evento Button1_Click il seguente codice:
Person1 = New Person("Karen", "Berge")
Person2 = New Person("David", "Campbell")
Person3 = New Person("Jim", "Kim")
'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 ae As ArgumentException
MessageBox.Show("Duplicate Key")
End Try
-
L'oggetto Hashtable fornisce un indicizzatore. Nella seguente procedura effettuare l'indicizzazione con la chiave per accedere al valore memorizzato nel percorso con hash.
-
Aggiungere un controllo Button a Form1 e modificare la proprietà Text in
Recupera elementi.
-
Fare doppio clic sul pulsante e incollare nell'evento Button2_Click il seguente codice:
'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 ex As NullReferenceException
MessageBox.Show("Key not in Hashtable")
End Try
-
Nella seguente procedura utilizzare il metodo Remove per rimuovere un singolo elemento dall'insieme HashTable:
-
Aggiungere un controllo Button a Form1 e modificare la proprietà Text in
Rimuovi elemento.
-
Fare doppio clic sul pulsante e incollare nell'evento Button3_Click il seguente codice:
'Use the Count property.
If (MyTable.Count = 0) Then
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 (Berge)")
'Remove the object that is stored at the Key value Person1.Lname.
MyTable.Remove(Person1.Lname)
End If
-
Nella procedura seguente enumerare gli elementi memorizzati nell'insieme HashTable.
-
Aggiungere un controllo Button a Form1 e modificare la proprietà Text in
Enumera.
-
Fare doppio clic sul pulsante e incollare nell'evento Button4_Click il seguente codice:
Dim Enumerator As IDictionaryEnumerator
Enumerator = MyTable.GetEnumerator()
If (MyTable.Count = 0) Then
MessageBox.Show("The HashTable is empty")
Else
MessageBox.Show("Enumerating through the HashTable collection")
While Enumerator.MoveNext()
MessageBox.Show(Enumerator.Value.ToString())
End While
End If
Dim MyKeys As ICollection
Dim Key As Object
If (MyTable.Count = 0) Then
MessageBox.Show("The HashTable is empty")
Else
MessageBox.Show("Accessing keys property to return keys collection")
MyKeys = MyTable.Keys()
For Each Key In MyKeys
MessageBox.Show(Key.ToString)
Next
End If
Con questo codice viene dichiarata una variabile di tipo IDictionaryEnumerator e chiamato il metodo GetEnumerator dell'insieme HashTable. Con l'oggetto Enumerator restituito il codice enumera gli elementi che fanno parte dell'insieme e utilizza il metodo Keys di HashTable per l'enumerazione delle chiavi.
-
Nella seguente procedura utilizzare il metodo Clear per cancellare HashTable.
-
Aggiungere un controllo Button a Form1 e modificare la proprietà Text in
Cancella.
-
Fare doppio clic sul pulsante e incollare nell'evento Button5_Click il seguente codice:
MyTable.Clear()
MessageBox.Show("HashTable is now empty")
-
Attenersi alle seguenti procedure per generare ed eseguire l'applicazione:
-
Scegliere il pulsante Aggiungi elementi. Si noti che all'insieme HashTable vengono aggiunti tre oggetti Person.
-
Scegliere Recupera elementi. Si noti che l'indicizzatore recupera gli elementi nell'insieme HashTable. Vengono visualizzati i tre elementi appena aggiunti.
-
Scegliere il pulsante Rimuovi elemento. Si noti che l'elemento nel percorso della chiave "Berge" viene eliminato.
-
Scegliere Enumera. Si noti che IDictionaryEnumerator enumera gli elementi nell'insieme HashTable.
-
Scegliere Cancella. Si noti che tutti gli elementi vengono cancellati dall'insieme HashTable.
NOTA: i nomi di aziende, organizzazioni, prodotti, domini, gli indirizzi di posta elettronica, i loghi, i nomi di persone, luoghi e gli eventi utilizzati in questo esempio sono di fantasia. Eventuali corrispondenze con società, organizzazioni, prodotti, nomi di dominio, indirizzi di posta elettronica, loghi, persone, luoghi o eventi reali non sono intenzionali e non devono essere considerate tali.
Identificativo articolo: 307933 - Ultima modifica: sabato 13 aprile 2002 - Revisione: 1.0
Le informazioni in questo articolo si applicano a
- Microsoft Visual Basic .NET 2002 Standard Edition
| kbhowto kbhowtomaster KB307933 |
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.