C# Hashtable s příklady
⚡ Chytré shrnutí
Hashtable v C# je kolekce z oboru názvů System.Collections, která ukládá data jako páry klíč-hodnota, kde každý jedinečný klíč se mapuje na hodnotu a klíč umožňuje rychlé vyhledávání této uložené hodnoty.

Co je Hashtable v C#?
Hašovací tabulka je speciální kolekce, která se používá k ukládání položek klíč–hodnota. Takže namísto ukládání pouze jedné hodnoty, jako je zásobník, seznam polí a fronta, hashovací tabulka ukládá 2 hodnoty. Tyto 2 hodnoty tvoří prvek hash tabulky.
Níže je několik příkladů, jak mohou hodnoty hashovací tabulky vypadat.
{ "001" , ".Net" }
{ "002" , ".C#" }
{ "003" , "ASP.Net" }
Výše máme 3 páry klíčových hodnot. Klíče každého prvku jsou 001, 002 a 003. Hodnoty každého páru klíč-hodnota jsou „. Čistá“, „C#“ a „ASP.Net“.
Podívejme se na operace dostupné pro kolekci Hashtable podrobněji.
Deklarace hashtable
Deklarace hashtable je uvedena níže. Hashtable je vytvořen pomocí Hashtable Datatype. Klíčové slovo „new“ se používá k vytvoření objektu hashtable. Objekt je pak přiřazen k proměnné ht.
Hashtable ht = new Hashtable()
Přidávání prvků do hashtable
Metoda Add se používá k přidání prvku do fronta. Obecná syntaxe příkazu je uvedena níže
HashTable.add("key","value")
Příklad 1:
Pamatujte, že každý prvek hash tabulky se skládá ze 2 hodnot, jedna je klíč a druhá hodnota.
Nyní se podívejme, jak to funguje na úrovni kódu. Veškerý níže uvedený kód bude zapsán do naší konzolové aplikace.
Kód bude zapsán do našeho souboru Program.cs. V níže uvedeném programu napíšeme kód, abychom viděli, jak můžeme použít výše uvedené metody.
Prozatím se v našem příkladu podíváme na to, jak můžeme vytvořit hashtable , přidat prvky do hashtable a podle toho je zobrazit.
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 Vysvětlení:-
- Nejprve deklarujeme proměnnou hashtable pomocí datového typu Hashtable pomocí klíčového slova „New“. Název proměnné, kterou definuje, je 'ht'.
- Prvky pak do hashovací tabulky přidáme pomocí metody Add. Pamatujte, že při přidávání něčeho do hashtable musíme přidat klíčový i hodnotový prvek.
- Neexistuje žádný přímý způsob, jak zobrazit prvky hash tabulky.
- Abychom mohli zobrazit hashtable , musíme nejprve získat seznam klíčů (001, 002 a 003) z tabulky hash.
- To se provádí prostřednictvím rozhraní ICollection. Jedná se o speciální datový typ, který lze použít k uložení klíčů sbírek hashtable. Klíče kolekce hashtable pak přiřadíme proměnné 'keys'.
- Dále pro každou hodnotu klíče získáme přidruženou hodnotu v hashovací tabulce pomocí příkazu ht[k].
Pokud je výše uvedený kód zadán správně a program je spuštěn, zobrazí se následující výstup.
Výstup:
Podívejme se na některé další metody dostupné pro hashovací tabulky.
ContainsKey
Tato metoda se používá ke zjištění, zda je klíč přítomen v hashtable. Níže je obecná syntaxe tohoto příkazu. Příkaz vrátí true, pokud klíč existuje, jinak vrátí hodnotu false.
Hashtable.Containskey(key)
ObsahujeValue
Tato metoda se používá ke zjištění, zda je v hashtable přítomna hodnota. Níže je obecná syntaxe tohoto příkazu. Příkaz vrátí true, pokud Hodnota existuje, jinak vrátí hodnotu false.
Hashtable.ContainsValue(value)
Příklad 2:
Pojďme změnit kód v našem Konzolová aplikace abychom předvedli, jak můžeme použít metody „Containskey“ a „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 Vysvětlení:-
- Nejprve použijeme metodu ContainsKey, abychom zjistili, zda je klíč přítomen v hashovací tabulce. Tato metoda vrátí hodnotu true, pokud je klíč přítomen v hashtable. Tato metoda by měla vrátit hodnotu true, protože klíč v hashtable existuje.
- Poté použijeme metodu ContainsValue, abychom zjistili, zda je hodnota přítomna v hashovací tabulce. Tato metoda vrátí 'true', protože hodnota v hashtable existuje.
Pokud je výše uvedený kód zadán správně a program je spuštěn, zobrazí se následující výstup.
Výstup:
Z výstupu můžete jasně vidět, že klíč i hodnota jsou v hashovací tabulce přítomny.
Jak procházet hashovací tabulkou v C#
Výše uvedené příklady čtou hodnoty prostřednictvím kolekce Keys, ale Hashtable lze procházet čistším způsobem. Smyčka foreach nad DictionaryEntry vám předá klíč a hodnotu každého prvku společně v jednom průchodu, což je nejběžnější způsob čtení Hashtable.
Krok 1) Vytvořte hashtable a přidejte do něj tři páry klíč-hodnota.
Krok 2) Projděte si smyčkou Hashtable s proměnnou DictionaryEntry a poté si přečtěte vlastnosti Key a Value každé položky.
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 Vysvětlení:-
- Vytvoří se Hashtable s názvem ht a pomocí metody Add se vloží tři páry klíč-hodnota.
- Smyčka foreach přiřadí každý prvek objektu DictionaryEntry, jehož vlastnosti Key a Value zpřístupňují dvě poloviny dvojice.
Když program běží, vypíše každý klíč vedle jeho hodnoty, například 101 – JavaProtože Hashtable neuchovává pořadí vkládání, páry se mohou objevit v jiném pořadí, než v jakém byly přidány. Chcete-li číst pouze klíče, projděte smyčkou kolekci Keys, a chcete-li číst pouze hodnoty, projděte smyčkou kolekci Values.
Metody a vlastnosti hashtable v C#
Třída Hashtable nabízí malou sadu metod a vlastností, které pokrývají téměř všechny úkoly, které budete potřebovat, od přidávání a odebírání párů až po kontrolu členství a počítání prvků. Nejužitečnější členy jsou uvedeny níže.
| Člen | Typ | Description |
|---|---|---|
| Přidat(klíč, hodnota) | Metoda | Vloží nový pár klíč-hodnota; klíč musí být jedinečný. |
| Odebrat (klávesu) | Metoda | Odstraní prvek, který odpovídá zadanému klíči. |
| Průhledná() | Metoda | Odstraní všechny páry klíč-hodnota z Hashtable. |
| ObsahujeKlíč(klíč) | Metoda | Vrací hodnotu true, pokud je zadaný klíč přítomen. |
| ObsahujeHodnotu(hodnota) | Metoda | Vrací hodnotu true, pokud je zadaná hodnota přítomna. |
| Počítat | Vlastnictví | Získá počet uložených párů klíč-hodnota. |
| Klávesy | Vlastnictví | Vrátí kolekci všech klíčů. |
| Hodnoty | Vlastnictví | Vrátí kolekci všech hodnot. |
Protože každý klíč je hašovaný, ContainsKey a indexer najdou prvek v téměř konstantním čase, což dělá Hashtable tak užitečným pro rychlé vyhledávání.
Rozdíl mezi hashtable a slovníkem v C#
Hashtable i Dictionary ukládají páry klíč-hodnota a oba patří do širší rodiny jazyků C#. kolekceDůležitým rozdílem je typová bezpečnost a tento rozdíl určuje, po které byste měli v novém kódu sáhnout.
- Bezpečnost typů: Hashtable ukládá každý klíč a hodnotu jako objekt, zatímco Dictionary je generický, takže kompilátor kontroluje typy, které používáte.
- Namespace: Hashtable se nachází v System.Collections, zatímco Dictionary se nachází v System.Collections.Generic.
- Boxing: Hashtable ukládá hodnoty typů, jako například int, ale generický Dictionary je ukládá přímo a těmto nákladům se vyhne.
- Výkon: Slovník je obvykle rychlejší, protože při čtení hodnoty nepotřebuje zpětné přetypování z objektu.
- Bezpečnost vlákna: Hashtable nabízí Syncchronizovaný obal pro jednoho autora s mnoha čtečkami, zatímco souběžný kód obvykle volí ConcurrentDictionary.
Pro jakýkoli nový projekt je doporučenou volbou generický Dictionary a negenerický Hashtable se objevuje hlavně ve starším kódu.




