Categories: C# (sharp)

Struttura Dati Hashtable in C#

Nel Framework .NET è presente un’altra struttura dati molto importante, oltre agli ArrayList visti nella scorsa lezione di questo corso sul linguaggio C# ( sharp ), le Hashtable. Questa struttura contiene gli oggetti come coppie chiave-valore, ogni oggetto nella struttura è quindi individuabile tramite la sua chiave. Quest’ultima non può essere un valore nullo, mentre l’oggetto associato si. Gli oggetti utilizzati come chiave devono implementare i metodi GetHashCode ed Equals, che sono necessari per costruire la tabella interna dell’Hashtable e sono necessari per l’organizzazione della struttura dati. Quando un oggetto viene inserito nell’Hashtable, in pratica viene immesso nel “cestino” relativo al codice hash della chiave fornita. Un cestino ( bucket ) è una zona di memoria che può contenere uno o più oggetti. Al momento dell’inserimento dei dati viene verificato il codice hash della chiave ed identificato nel cestino relativo ed una volta individuato viene inserito in quest’ultimo. Per la ricerca si utilizza il valore di hash della chiave per identificare uno specifico cestino, in questo modo si riducono sostanzialmente il numero dei confronti di chiavi necessario per individuare l’elemento richiesto. Una proprietà fondamentale delle Hashtable è il fattore di carico ( load factor ) che determina il rapporto massimo tra il numero di elementi ed il numero dei cestini. Con fattori di carico bassi le ricerche avvengono più velocemente, ma si occupa più memoria. Con fattori di carico alti le ricerche sono più lente, ma si occupa meno memoria. Il valore standard per il fattore di carico è 1.0, che garantisce un buon rapporto tra velocità e consumo di memoria.
Vediamo ora i metodi più importanti per l’oggetto Hashtable:

  • Add – aggiunge un elemento nell’Hashtable
  • Clear – rimuove tutti gli elementi dall’Hashtable
  • Clone – serve per creare una copia della lista, senza copiare gli elementi in essa contenuti
  • Contains – determina se un elemento si trova o no nella struttura
  • ContainsKey – indica se una  chiave si trova in una struttura Hashtable
  • ContainsValue – indica se un oggetto è presente o meno nell’Hashtable
  • CopyTo – copia gli elementi presenti nell’Hashtable in un array all’indice specificato
  • GetEnumerator – ritorna un enumeratore che può essere utilizzato per scorrere l’Hashtable
  • Remove – rimuove uno specifico oggetto dalla struttura dati

Vediamo un esempio nel quale inseriamo alcuni valori in una Hashtable e quindi li stampiamo:

using System;
using System.Collections;

public class Corso
{
  static void Main(string[] args)
  {
    Hashtable myHash = new Hashtable();
    // Ogni riferimento a persone è casuale
    myHash.Add("studente1", "Mario Rossi");
    myHash.Add("studente2", "Giovanni Bianchi");
    myHash.Add("studente3", "Luigi Grigi");
    myHash.Add("studente4", "Carlo Bruni");
    myHash.Add("studente5", "Domenico Verdi");

    // Iteriamo tutta la hash con un enumerator
    IDictionaryEnumerator myEnum = myHash.GetEnumerator();
    while (myEnum.MoveNext())
      Console.WriteLine("{0} => {1}", myEnum.Key, myEnum.Value);

    Console.WriteLine("");

    // Stampiamo un valore del quale conosciamo la chiave
    if (myHash.ContainsKey("studente4"))
       Console.WriteLine(myHash["studente4"]);

    Console.ReadKey();
   }
}

Ho cercato di far vedere l’utilizzo delle Hastable in tutti i loro usi classici. Ricordo che per qualsiasi problema o istruzione non ben compresa potete fare domande e richiedere assistenza al nostro forum sul linguaggio C#.

<< Lezione Precedente – Inizio CorsoIndice LezioniLezione Successiva >>

Share
Giampaolo Rossi

Sviluppatore di software gestionale da oltre 28 anni.

Published by
Giampaolo Rossi

Recent Posts

MerciGest: il gestionale di magazzino semplice e gratuito

MerciGest è il software gestionale gratuito per Windows che semplifica la gestione del magazzino: giacenze,…

2 giorni ago

Software gestionali con SQL Server: un archivio unico, accessibile ovunque

Tutti i nostri software gestionali possono essere collegati a un database SQL Server, consentendo l’accesso…

4 giorni ago

Come iniziare ad usare MerciGest in 5 minuti

MerciGest è semplice e immediato: basta scaricare e installare il programma per iniziare subito. Al…

6 giorni ago

Cos’è MerciGest e a chi serve

MerciGest è un gestionale di magazzino per Windows pensato per negozi, piccole imprese e artigiani…

1 settimana ago

Introduzione alla Standard Template Library (STL)

La Standard Template Library (STL) è una delle componenti più potenti del C++. Fornisce una…

7 mesi ago

Un Abbonamento per Tutti i Software

Sono arrivato alla convinzione che un abbonamento per tutti i miei software gestionali sia il…

2 anni ago