Tabella hash C# con esempi
⚡ Riepilogo intelligente
In C#, una tabella hash è una collezione dello spazio dei nomi System.Collections che memorizza i dati come coppie chiave-valore, dove ogni chiave univoca corrisponde a un valore e la chiave consente una ricerca rapida del valore memorizzato.

Cos'è Hashtable in C#?
Una tabella hash è una raccolta speciale utilizzata per archiviare elementi chiave-valore. Quindi, invece di memorizzare un solo valore come lo stack, l'elenco degli array e la coda, la tabella hash memorizza 2 valori. Questi 2 valori formano un elemento della tabella hash.
Di seguito sono riportati alcuni esempi di come potrebbero apparire i valori di una tabella hash.
{ "001" , ".Net" }
{ "002" , ".C#" }
{ "003" , "ASP.Net" }
Sopra abbiamo 3 coppie di valori chiave. Le chiavi di ciascun elemento sono rispettivamente 001, 002 e 003. I valori di ciascuna coppia chiave-valore sono ". Net“, “C#” e “ASP.Net” rispettivamente.
Diamo un'occhiata più in dettaglio alle operazioni disponibili per la raccolta Hashtable.
Dichiarazione dell'Hashtable
La dichiarazione di una Hashtable è mostrata di seguito. Una Hashtable viene creata con l'aiuto del tipo di dati Hashtable. La parola chiave "new" viene utilizzata per creare un oggetto di una Hashtable. L'oggetto viene quindi assegnato alla variabile ht.
Hashtable ht = new Hashtable()
Aggiunta di elementi alla Hashtable
Il metodo Add viene utilizzato per aggiungere un elemento al file fare la coda. La sintassi generale dell'enunciato è riportata di seguito
HashTable.add("key","value")
Esempio 1:
Ricorda che ogni elemento della tabella hash è composto da 2 valori, uno è la chiave e l'altro è il valore.
Ora vediamolo funzionare a livello di codice. Tutto il codice indicato di seguito verrà scritto nella nostra applicazione Console.
Il codice verrà scritto nel nostro file Program.cs. Nel programma seguente, scriveremo il codice per vedere come possiamo utilizzare i metodi sopra menzionati.
Per ora nel nostro esempio, vedremo solo come possiamo creare una tabella hash, aggiungere elementi alla tabella hash e visualizzarli di conseguenza.
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Program { static void Main(string[] args) { Hashtable ht = new Hashtable(); ht.Add("001",".Net"); ht.Add("002","C#"); ht.Add("003","ASP.Net"); ICollection keys = ht.Keys; foreach (String k in keys) { Console.WriteLine(ht[k]); } Console.ReadKey(); } } }
Code Spiegazione:-
- Innanzitutto, dichiariamo la variabile hashtable utilizzando il tipo di dati Hashtable utilizzando la parola chiave "New". Il nome della variabile definita è 'ht'.
- Aggiungiamo quindi gli elementi alla tabella hash utilizzando il metodo Add. Ricorda che dobbiamo aggiungere sia un elemento chiave che un valore quando aggiungiamo qualcosa alla tabella hash.
- Non esiste un modo diretto per visualizzare gli elementi di una tabella hash.
- Per visualizzare la tabella hash, dobbiamo prima ottenere l'elenco delle chiavi (001, 002 e 003) dalla tabella hash.
- Questa operazione viene eseguita tramite l'interfaccia ICollection. Si tratta di un tipo di dati speciale che può essere utilizzato per archiviare le chiavi di raccolte di tabelle hash. Assegniamo quindi le chiavi della raccolta hashtable alla variabile "keys".
- Successivamente, per ciascun valore chiave, otteniamo il valore associato nella tabella hash utilizzando l'istruzione ht[k].
Se il codice sopra riportato viene inserito correttamente e il programma viene eseguito, verrà visualizzato il seguente output.
Produzione:
Diamo un'occhiata ad altri metodi disponibili per le tabelle hash.
Contiene chiave
Questo metodo viene utilizzato per verificare se è presente una chiave nell'Hashtable. Di seguito è riportata la sintassi generale di questa istruzione. L'istruzione restituirà true se la chiave esiste, altrimenti restituirà il valore false.
Hashtable.Containskey(key)
ContieneValore
Questo metodo viene utilizzato per verificare se un valore è presente nell'Hashtable. Di seguito è riportata la sintassi generale di questa istruzione. L'istruzione restituirà true se il valore esiste, altrimenti restituirà il valore false.
Hashtable.ContainsValue(value)
Esempio 2:
Cambiamo il codice nel nostro Applicazione console per mostrare come possiamo utilizzare il metodo “Containskey” e “ContainsValue”.
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Program { static void Main(string[] args) { Hashtable ht = new Hashtable(); ht.Add("001",".Net"); ht.Add("002","C#"); ht.Add("003","ASP.Net"); Console.WriteLine(ht.ContainsKey("001")); Console.WriteLine(ht.ContainsValue("C#")); Console.ReadKey(); } } }
Code Spiegazione:-
- Innanzitutto utilizziamo il metodo ContieneKey per verificare se la chiave è presente nella tabella hash. Questo metodo restituirà true se la chiave è presente nella tabella hash. Questo metodo dovrebbe restituire true poiché la chiave esiste nella tabella hash.
- Utilizziamo quindi il metodo ContieneValue per verificare se il valore è presente nella tabella hash. Questo metodo restituirà "true" poiché il valore esiste nella tabella hash.
Se il codice sopra riportato viene inserito correttamente e il programma viene eseguito, verrà visualizzato il seguente output.
Produzione:
Dall'output, puoi vedere chiaramente che sia la chiave che il valore da cercare sono presenti nella tabella hash.
Come scorrere una tabella hash in C#
Gli esempi precedenti leggono i valori attraverso la collezione Keys, ma una Hashtable può essere attraversata in un modo più elegante. Un ciclo foreach su un DictionaryEntry restituisce la chiave e il valore di ogni elemento insieme in un'unica passata, che è il modo più comune per leggere una Hashtable.
Passo 1) Crea una tabella hash e aggiungivi tre coppie chiave-valore.
Passo 2) Scorri la tabella hash con una variabile di tipo DictionaryEntry, quindi leggi le proprietà Chiave e Valore di ogni voce.
using System; using System.Collections; namespace DemoApplication { class Program { static void Main(string[] args) { Hashtable ht = new Hashtable(); ht.Add("101", "Java"); ht.Add("102", "Python"); ht.Add("103", "Kotlin"); foreach (DictionaryEntry entry in ht) { Console.WriteLine(entry.Key + " - " + entry.Value); } Console.ReadKey(); } } }
Code Spiegazione:-
- Viene creata una tabella hash denominata ht e vengono inserite tre coppie chiave-valore tramite il metodo Add.
- Il ciclo foreach assegna a ciascun elemento un oggetto DictionaryEntry, le cui proprietà Key e Value espongono le due metà della coppia.
Quando il programma viene eseguito, stampa ogni tasto accanto al suo valore, come 101 – JavaPoiché una tabella hash non mantiene l'ordine di inserimento, le coppie potrebbero apparire in una sequenza diversa da quella in cui sono state aggiunte. Per leggere solo le chiavi, itera sulla collezione Keys, mentre per leggere solo i valori, itera sulla collezione Values.
Metodi e proprietà delle tabelle hash in C#
La classe Hashtable espone un piccolo insieme di metodi e proprietà che coprono quasi tutte le operazioni necessarie, dall'aggiunta e rimozione di coppie al controllo dell'appartenenza e al conteggio degli elementi. I membri più utili sono elencati di seguito.
| Member | Tipo | Descrizione |
|---|---|---|
| Aggiungi(chiave, valore) | Metodo | Inserisce una nuova coppia chiave-valore; la chiave deve essere univoca. |
| Rimuovi (chiave) | Metodo | Elimina l'elemento corrispondente alla chiave specificata. |
| Chiaro() | Metodo | Rimuove tutte le coppie chiave-valore dalla tabella hash. |
| ContieneChiave(chiave) | Metodo | Restituisce true se la chiave specificata è presente. |
| ContieneValore(valore) | Metodo | Restituisce true se il valore specificato è presente. |
| Contare | Proprietà | Restituisce il numero di coppie chiave-valore memorizzate. |
| Keys | Proprietà | Restituisce una raccolta di tutte le chiavi. |
| Valori | Proprietà | Restituisce una raccolta di tutti i valori. |
Poiché ogni chiave è sottoposta a hashing, ContainsKey e l'indicizzatore individuano un elemento in un tempo pressoché costante, ed è proprio questo che rende una tabella hash così utile per le ricerche veloci.
Differenza tra Hashtable e Dictionary in C#
Sia una Hashtable che un Dictionary memorizzano coppie chiave-valore e appartengono alla più ampia famiglia di C#. collezioniLa differenza fondamentale risiede nella sicurezza dei tipi, ed è proprio questa differenza a determinare quale sia la soluzione migliore da adottare nel nuovo codice.
- Tipo di sicurezza: Una tabella hash memorizza ogni chiave e valore come oggetto, mentre un dizionario è generico, quindi il compilatore controlla i tipi che utilizzi.
- Spazio dei nomi: Hashtable risiede in System.Collections, mentre Dictionary risiede in System.Collections.Generic.
- BoxING: Una tabella hash incapsula i tipi di valore come int, ma un dizionario generico li memorizza direttamente, evitando tale costo.
- Performance: Il dizionario è generalmente più veloce perché non richiede alcun casting dall'oggetto quando si legge un valore.
- Sicurezza delle filettature: Hashtable offre il SyncWrapper cronizzato per un singolo scrittore con molti lettori, mentre il codice concorrente di solito sceglie ConcurrentDictionary.
Per qualsiasi nuovo progetto, il dizionario generico è la scelta consigliata, mentre l'oggetto non generico Hashtable compare principalmente nel codice più datato.




