HOW TO: Lavorare con l'insieme HashTable in Visual Basic .NET

Sommario

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.
  1. 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.
  2. 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.
  3. Scegliere Apri nella finestra di dialogo Aggiungi nuovo elemento.
  4. 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.
  5. Aggiungere la seguente istruzione Imports in Form1.vb all'inizio del modulo di codice:
    Imports System.Collections
  6. 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
  7. 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.
    1. Posizionare un controllo Button sul Form1 e modificare la proprietà Text in
      Aggiungi elementi.
    2. 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
  8. L'oggetto Hashtable fornisce un indicizzatore. Nella seguente procedura effettuare l'indicizzazione con la chiave per accedere al valore memorizzato nel percorso con hash.
    1. Aggiungere un controllo Button a Form1 e modificare la proprietà Text in
      Recupera elementi.
    2. 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
  9. Nella seguente procedura utilizzare il metodo Remove per rimuovere un singolo elemento dall'insieme HashTable:
    1. Aggiungere un controllo Button a Form1 e modificare la proprietà Text in
      Rimuovi elemento.
    2. 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
  10. Nella procedura seguente enumerare gli elementi memorizzati nell'insieme HashTable.
    1. Aggiungere un controllo Button a Form1 e modificare la proprietà Text in
      Enumera.
    2. 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.
  11. Nella seguente procedura utilizzare il metodo Clear per cancellare HashTable.
    1. Aggiungere un controllo Button a Form1 e modificare la proprietà Text in
      Cancella.
    2. Fare doppio clic sul pulsante e incollare nell'evento Button5_Click il seguente codice:
      MyTable.Clear()
      MessageBox.Show("HashTable is now empty")
  12. Attenersi alle seguenti procedure per generare ed eseguire l'applicazione:
    1. Scegliere il pulsante Aggiungi elementi. Si noti che all'insieme HashTable vengono aggiunti tre oggetti Person.
    2. Scegliere Recupera elementi. Si noti che l'indicizzatore recupera gli elementi nell'insieme HashTable. Vengono visualizzati i tre elementi appena aggiunti.
    3. Scegliere il pulsante Rimuovi elemento. Si noti che l'elemento nel percorso della chiave "Berge" viene eliminato.
    4. Scegliere Enumera. Si noti che IDictionaryEnumerator enumera gli elementi nell'insieme HashTable.
    5. 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.


Proprietà

ID articolo: 307933 - Ultima revisione: 13 apr 2002 - Revisione: 1

Feedback