C# hashtable példákkal

⚡ Okos összefoglaló

A C# hashtable a System.Collections névtér egy gyűjteménye, amely kulcs-érték párokként tárolja az adatokat, ahol minden egyedi kulcs egy értékhez van leképezve, és a kulcs gyors kikeresést biztosít a tárolt értékre.

  • ???? Kulcs-érték párok: Egy hashtable elemenként két értéket tárol, egy kulcsot és annak értékét, a verem vagy tömblista által tárolt egyetlen érték helyett.
  • Elemek hozzáadása: Az Add metódus egy kulcsot és egy értéket együtt szúr be, és a Hashtable-ben lévő minden kulcsnak egyedinek kell lennie.
  • 👀 ContainsKey és ContainsValue: Ezek a metódusok igaz vagy hamis értéket adnak vissza, így ellenőrizheted, hogy egy kulcs vagy egy érték létezik-e már.
  • 🔁 Értékek leolvasása: A Keys tulajdonság egy ICollection vagy egy DictionaryEntry ciklussal lehetővé teszi az összes tárolt érték sorban történő beolvasását.
  • 🇧🇷 Módszerek és tulajdonságok: A Remove, Clear, Count, Keys és Values ​​parancsok a Hashtable tartalmát kezelik és vizsgálják.
  • 🤖 AI segítség: A GitHub Copilot Hashtable kódot használ, míg a modern C# és ML.NET a generikus Dictionary-t részesíti előnyben a típusbiztos kulcs-érték adatokhoz.

C# Hashtable

Mi a Hashtable a C#-ban?

A hash tábla egy speciális gyűjtemény, amely kulcsérték elemek tárolására szolgál. Tehát ahelyett, hogy csak egy értéket tárolna, mint például a verem, a tömblista és a sor, a hash tábla 2 értéket tárol. Ez a 2 érték a hash tábla elemét képezi.

Az alábbiakban néhány példa látható arra, hogyan nézhetnek ki egy hash-tábla értékei.

{ "001" , ".Net" }
{ "002" , ".C#" }
{ "003" , "ASP.Net" }

Fent van 3 kulcsértékpárunk. Az egyes elemek billentyűi rendre 001, 002 és 003. Az egyes kulcsértékpárok értékei ". Net“, „C#” és „ASP.Net”.

Nézzük meg részletesebben a Hashtable gyűjteményhez elérhető műveleteket.

A Hashtable nyilatkozata

A Hashtable nyilatkozata alább látható. A Hashtable a Hashtable Datatype segítségével jön létre. Az „új” kulcsszó egy Hashtable objektumának létrehozására szolgál. Az objektumot ezután a ht változóhoz rendeljük.

Hashtable ht = new Hashtable()

Elemek hozzáadása a Hashtable-hoz

Az Add metódus segítségével elemet adhatunk hozzá a sorban áll. Az utasítás általános szintaxisa alább látható

HashTable.add("key","value")

Példa 1:

Ne feledje, hogy a hash tábla minden eleme 2 értékből áll, az egyik a kulcs, a másik az érték.

Lássuk, hogyan működik ez kódszinten. Az összes alább említett kód be lesz írva a konzolalkalmazásunkba.

A kód a Program.cs fájlunkba kerül. Az alábbi programban megírjuk a kódot, hogy megnézzük, hogyan tudjuk használni a fent említett módszereket.

Példánkban egyelőre csak azt nézzük meg, hogyan hozhatunk létre hashtable-t, adjunk hozzá elemeket a hashtable-hoz, és ennek megfelelően jelenítsük meg azokat.

Hashtable C# nyelven

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 Magyarázat:-

  1. Először deklaráljuk a hashtable változót a Hashtable adattípus használatával, az „Új” kulcsszó használatával. A definiált változó neve 'ht'.
  2. Ezután az Add metódussal elemeket adunk a hash táblához. Ne feledje, hogy kulcs- és értékelemet is fel kell adnunk, amikor hozzáadunk valamit a hashtable-hoz.
  3. Nincs közvetlen mód a hash-tábla elemeinek megjelenítésére.
    • A hashtable megjelenítéséhez először le kell szereznünk a kulcsok listáját (001, 002 és 003) a hash táblából.
    • Ez az ICollection felületen keresztül történik. Ez egy speciális adattípus, amely egy hashtable gyűjtemények kulcsainak tárolására használható. Ezután hozzárendeljük a hashtable gyűjtemény kulcsait a 'keys' változóhoz.
  4. Ezután minden kulcsértékhez megkapjuk a hozzá tartozó értéket a hashtable-ban a ht[k] utasítás használatával.

Ha a fenti kódot megfelelően adta meg és a program lefut, a következő kimenet jelenik meg.

output:

Hashtable C# nyelven

Nézzünk meg néhány további módszert, amelyek elérhetők a hash-táblázatokhoz.

ContainsKey

Ezzel a módszerrel ellenőrizhető, hogy van-e kulcs a Hashtable-ban. Az alábbiakban ennek az állításnak az általános szintaxisa látható. Az utasítás igaz értéket ad vissza, ha a kulcs létezik, ellenkező esetben false értéket ad vissza.

Hashtable.Containskey(key)

ContainsValue

Ezzel a módszerrel ellenőrizhető, hogy egy érték szerepel-e a hashtable-ban. Az alábbiakban ennek az állításnak az általános szintaxisa látható. Az utasítás igazat ad vissza, ha az érték létezik, ellenkező esetben hamis értéket ad vissza.

Hashtable.ContainsValue(value)

Példa 2:

Változtassuk meg a kódot Konzol alkalmazás hogy bemutassuk, hogyan használhatjuk a „Containskey” és a „ContainsValue” metódust.

Hashtable C# nyelven

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 Magyarázat:-

  1. Először a ContainsKey metódust használjuk annak ellenőrzésére, hogy a kulcs megtalálható-e a hashtable-ban. Ez a metódus igazat ad vissza, ha a kulcs szerepel a hashtable-ban. Ennek a metódusnak igaznak kell lennie, mivel a kulcs létezik a hashtable-ban.
  2. Ezután a ContainsValue metódust használjuk annak ellenőrzésére, hogy az érték szerepel-e a hashtable-ban. Ez a metódus "true"-t ad vissza, mivel az Érték létezik a hashtable-ban.

Ha a fenti kódot megfelelően adta meg és a program lefut, a következő kimenet jelenik meg.

output:

Hashtable C# nyelven

A kimenetből jól látható, hogy a keresett kulcs és érték egyaránt jelen van a hash táblában.

Hogyan cikluson keresztül vigyünk végig egy C# hashtable-t

A fenti példák a Keys kollekción keresztül olvassák be az értékeket, de egy Hashtable ennél egyszerűbb módon is bejárható. Egy foreach ciklus egy DictionaryEntry felett egyetlen menetben adja meg a kulcsot és az összes elem értékét, ami a Hashtable olvasásának leggyakoribb módja.

Step 1) Hozz létre egy hashtable-t, és adj hozzá három kulcs-érték párt.

Step 2) Végigcsináljuk a Hashtable-t egy DictionaryEntry változóval, majd kiolvassuk az egyes bejegyzések Key és Value tulajdonságait.

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 Magyarázat:-

  1. Létrejön egy ht nevű hashtable, és három kulcs-érték párt szúr be az Add metódussal.
  2. A foreach ciklus minden elemhez egy DictionaryEntry-t rendel, amelynek Key és Value tulajdonságai a pár két felét teszik elérhetővé.

Amikor a program fut, kinyomtatja az egyes kulcsokat az értékük mellé, például 101 – JavaMivel egy Hashtable nem tartja meg a beszúrási sorrendet, a párok eltérő sorrendben jelenhetnek meg, mint ahogyan hozzáadták őket. Ha csak a kulcsokat szeretné olvasni, akkor a Keys gyűjteményen, ha pedig csak az értékeket szeretné olvasni, akkor a Values ​​gyűjteményen kell végigmenni.

C# hashtable metódusok és tulajdonságok

A Hashtable osztály egy kisebb metódus- és tulajdonságkészletet tesz elérhetővé, amely szinte minden szükséges feladatot lefed, a párok hozzáadásától és eltávolításától kezdve a tagság ellenőrzéséig és az elemek számlálásáig. A leghasznosabb tagokat az alábbiakban soroljuk fel.

Tag típus Leírás
Hozzáadás(kulcs, érték) Módszer Beszúr egy új kulcs-érték párt; a kulcsnak egyedinek kell lennie.
Eltávolítás(kulcs) Módszer Törli a megadott kulcsnak megfelelő elemet.
Egyértelmű() Módszer Eltávolít minden kulcs-érték párt a Hashtable-ből.
TartalmazKey(kulcs) Módszer Igaz értéket ad vissza, ha a megadott kulcs jelen van.
Értéket tartalmaz(érték) Módszer Igaz értéket ad vissza, ha a megadott érték jelen van.
Gróf Ingatlanok Lekéri a tárolt kulcs-érték párok számát.
Keys Ingatlanok Az összes kulcs gyűjteményét adja vissza.
Értékek Ingatlanok Az összes érték egy gyűjteményét adja vissza.

Mivel minden kulcs hashelt, a ContainsKey és az indexelő közel állandó idő alatt megtalálja az elemet, ami a Hashtable-t olyan hasznossá teszi a gyors keresésekhez.

Különbség a hashtable és a szótár között C#-ban

A hashtable és a szótár is kulcs-érték párokat tárol, és mindkettő a C# tágabb családjába tartozik. gyűjteményA fontos különbség a típusbiztonság, és ez a különbség dönti el, hogy melyiket érdemes igénybe venni az új kódban.

  • Típusbiztonság: Egy Hashtable minden kulcsot és értéket objektumként tárol, míg a Dictionary általános, így a fordító ellenőrzi a használt típusokat.
  • Névtér: A hashtable a System.Collections, míg a Dictionary a System.Collections.Generic mappában található.
  • BoxING: Egy Hashtable olyan értékeket kezel, mint az int, de egy általános szótár közvetlenül tárolja őket, így elkerülve ezt a költséget.
  • Teljesítmény: A szótár általában gyorsabb, mivel nem kell visszacsatolni az objektumból, amikor egy értéket olvasunk.
  • Menetbiztonság: A Hashtable a következőket kínálja: Synchronizált wrapper egy íróhoz sok olvasóval, míg a párhuzamos kód általában a ConcurrentDictionary-t választja.

Minden új projekthez az általános Dictionary az ajánlott választás, a nem általános Hashtable pedig főként a régebbi kódban jelenik meg.

GYIK

A Remove metódus törli az adott kulccsal rendelkező elemet, és eggyel csökkenti a Count értékét. Ha a kulcs nem létezik, semmi sem történik, ezért először a ContainsKey metódust hívjuk meg, amikor biztosnak kell lennünk a kulcs jelenlétében.

Nem. Egy Hashtable minden kulcsának egyedinek kell lennie. Az Add függvény meghívása egy már létező kulccsal ArgumentException kivételt eredményez. Ugyanazt az értéket azonban több különböző kulcs alatt is tárolhatjuk hiba nélkül.

Egy Hashtable biztonságosan támogatja az egy írót és sok olvasót. Több írási szál esetén a Hashtable segítségével kell körbefuttatni.Synchronizált, vagy inkább a System.Collections.Concurrent ConcurrentDictionary-ját részesítsük előnyben, amely külső zárolások nélkül kezeli az egyidejű olvasásokat és írásokat.

Egy kulcs alapján történő értékkeresés átlagosan közel állandó O(1) időt vesz igénybe, mivel a kulcsot hashelni kell a tárolóhely megtalálásához. A nagy mennyiségű hash ütközés lelassíthatja a folyamatot, de ez ritka a jól elosztott kulcsok esetében.

Egy érték lehet null, de egy kulcs nem. Egy null kulcs átadása az Add függvénynek vagy az indexelőnek ArgumentNullException kivételt eredményez. Minden kulcsnak egyedinek kell lennie, és tárolás közben nem változhat.

Egy hashtable nem tart sorrendet, tehát nem lehet helyben rendezni. Másold a kulcsait egy listába vagy egy ArrayList-be, rendezd a listát, majd olvasd be az értékeket kulcs szerint. Egy rendezett lista automatikusan rendezetten tartja a bejegyzéseit.

Igen. A GitHub Copilot Hashtable deklarációkat, Add hívásokat és DictionaryEntry ciklusokat ír egy rövid megjegyzésből vagy metódusnévből. Gyakran javasolja az általános Dictionary használatát, mivel ez az ajánlott gyűjtemény az új C# kódhoz.

Az ML.NET betanítási adatai típusos gyűjteményeken és az IDataView folyamaton keresztül áramlanak Hashtable helyett. A hash alapú kulcs-érték térképek azonban továbbra is támogatják a jellemzőkeresést, a szókincskódolást és a gépi tanulási modell körüli gyorsítótárazást.

Foglald össze ezt a bejegyzést a következőképpen: