English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Hashtable è una collezione non generica che memorizza coppie di chiave/valore, simile alla collezione generica Dictionary<TKey,TValue>. Ottimizza la ricerca calcolando l'hash di ogni chiave e lo memorizza in diversi bucket interni, poi corrisponde l'hash specificato alla chiave durante l'accesso ai valori.
Hashtable memorizza coppie di chiave/valore.
Appartiene al namespace System.Collection.
Implementa l'interfaccia IDictionary.
La chiave deve essere unica e non può essere null.
I valori possono essere null o duplicati.
È possibile accedere ai valori passando una chiave all'indice, ad esempio myHashtable[key]
Gli elementi vengono memorizzati come oggetti DictionaryEntry.
Di seguito è riportato un esempio su come creare una tabella hash e aggiungere elementi.
Hashtable numberNames = new Hashtable(); numberNames.Add(1,"One"); // Aggiungere chiave/valore utilizzando il metodo Add() numberNames.Add(2,"Two"); numberNames.Add(3,"Three"); //Ecco un'eccezione di runtime: chiave già aggiunta. run-time exception: key already added. //numberNames.Add(3, "Three"); foreach(DictionaryEntry de in numberNames) Console.WriteLine("Key: {0}, Value: {1}", de.Key, de.Value); // utilizza la sintassi dell'inizializzatore di collection per creare una Hashtable var cities = new Hashtable(){ {"UK", "London, Manchester, Birmingham"}, {"USA", "Chicago, New York, Washington"}, {"India", "Mumbai, New Delhi, Pune"} ; foreach(DictionaryEntry de in cities) Console.WriteLine("Key: {0}, Value: {1}", de.Key, de.Value);
La collezione Hashtable può includere tutti gli elementi del dizionario, come mostrato di seguito.
Dictionary<int, string> dict = new Dictionary<int, string>(); dict.Add(1, "one"); dict.Add(2, "two"); dict.Add(3, "three"); Hashtable ht = new Hashtable(dict);
Passando una chiave all'indice, è possibile recuperare il valore corrispondente della chiave esistente dalla Hashtable. La Hashtable non è una collezione generica, quindi è necessario effettuare una conversione forzata del valore durante la ricerca.
// utilizza la sintassi dell'inizializzatore di collection per creare una Hashtable var cities = new Hashtable(){ {"UK", "London, Manchester, Birmingham"}, {"USA", "Chicago, New York, Washington"}, {"India", "Mumbai, New Delhi, Pune"} ; string citiesOfUK = (string) cities["UK"]; // converti in stringa string citiesOfUSA = (string) cities["USA"]; // converti in stringa Console.WriteLine(citiesOfUK); Console.WriteLine(citiesOfUSA); cities["UK"] = "Liverpool, Bristol"; // aggiorna il valore di UK cities["USA"] = "Los Angeles, Boston"; // aggiorna il valore di USA if(!cities.ContainsKey("France")){ cities["France"] = "Paris"; }
Il metodo Remove () elimina la chiave-valore che corrisponde al valore specificato nella Hashtable. Se non viene trovata la chiave specificata nella Hashtable, viene lanciata l'eccezione KeyNotfoundException, quindi è necessario utilizzare il metodo ContainsKey () per verificare la presenza della chiave esistente prima di eliminare.
Utilizzando il metodo Clear() è possibile eliminare tutti gli elementi in una volta.
var cities = new Hashtable(){ {"UK", "London, Manchester, Birmingham"}, {"USA", "Chicago, New York, Washington"}, {"India", "Mumbai, New Delhi, Pune"} ; cities.Remove("UK"); // rimuovi UK //cities.Remove("France"); // Lancia un'eccezione di runtime: KeyNotFoundException if(cities.ContainsKey("France")){ // Controlla prima di estrarre la chiave cities.Remove("France"); } cities.Clear(); // Elimina tutti gli elementi
La figura seguente illustra la struttura gerarchica della classe Hashtable.