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.

  • ???? Páry klíč-hodnota: Hashtable ukládá dvě hodnoty na prvek, klíč a jeho hodnotu, namísto jedné hodnoty, kterou obsahuje zásobník nebo seznam polí.
  • Přidávání prvků: Metoda Add vkládá klíč a hodnotu společně a každý klíč uvnitř Hashtable musí být jedinečný.
  • 👀 ObsahujeKlíč a ObsahujeValue: Tyto metody vracejí hodnotu true nebo false, takže můžete otestovat, zda klíč nebo hodnota již existuje.
  • 🔁 Hodnoty odečtu: Vlastnost Keys s ICollection nebo smyčkou DictionaryEntry umožňuje postupně číst všechny uložené hodnoty.
  • 🛠️ Metody a vlastnosti: Funkce Remove, Clear, Count, Keys a Values ​​spravují a kontrolují obsah Hashtable.
  • 🤖 Asistence AI: GitHub Copilot scaffolduje kód Hashtable, zatímco moderní C# a ML.NET upřednostňují generický slovník pro typově bezpečná data klíč-hodnota.

C# Hashtable

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.

Hashtable v C#

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í:-

  1. Nejprve deklarujeme proměnnou hashtable pomocí datového typu Hashtable pomocí klíčového slova „New“. Název proměnné, kterou definuje, je 'ht'.
  2. 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.
  3. 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'.
  4. 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:

Hashtable v C#

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“.

Hashtable v C#

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í:-

  1. 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.
  2. 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:

Hashtable v C#

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í:-

  1. Vytvoří se Hashtable s názvem ht a pomocí metody Add se vloží tři páry klíč-hodnota.
  2. 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.

Nejčastější dotazy

Metoda Remove odstraní prvek s daným klíčem a sníží hodnotu Count o jedna. Pokud klíč neexistuje, nic se nestane, proto v případě, že si musíte být jisti, že klíč je přítomen, zavolejte nejprve metodu ContainsKey.

Ne. Každý klíč v Hashtable musí být jedinečný. Volání metody Add s klíčem, který již existuje, vyvolá výjimku ArgumentException. Stejnou hodnotu však můžete uložit pod několik různých klíčů bez jakékoli chyby.

Hashtable bezpečně podporuje jednoho zapisovače s mnoha čtečkami. Pro několik vláken zápisu jej zabalte pomocí Hashtable.Syncchronized, nebo preferujte ConcurrentDictionary z System.Collections.Concurrent, který zpracovává souběžné čtení a zápisy bez externích zámků.

Vyhledávání hodnoty podle klíče probíhá v průměru za téměř konstantní čas O(1), protože klíč je hašován, aby se našel jeho prostor. Silné kolize hašovacích operací ho mohou zpomalit, ale to je u dobře distribuovaných klíčů vzácné.

Hodnota může být null, ale klíč nikoli. Předání nulového klíče metodě Add nebo indexeru vyvolá výjimku ArgumentNullException. Každý klíč musí být také jedinečný a neměl by se během ukládání měnit.

Hashtable si neudržuje žádné pořadí, takže ji nelze seřadit na místě. Zkopírujte její klíče do seznamu nebo ArrayList, seřaďte tento seznam a poté čtěte hodnoty podle klíče. SortedList si automaticky udržuje pořadí položek.

Ano. GitHub Copilot píše deklarace Hashtable, volání metody Add a smyčky DictionaryEntry z krátkého komentáře nebo názvu metody. Často místo toho navrhuje obecný Dictionary, protože to je doporučená kolekce pro nový kód C#.

Trénovací data ML.NET procházejí typovanými kolekcemi a kanálem IDataView, nikoli přes Hashtable. Mapy klíč-hodnota založené na hash však stále podporují vyhledávání funkcí, kódování slovní zásoby a ukládání do mezipaměti kolem modelu strojového učení.

Shrňte tento příspěvek takto: