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.

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.
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:-
- 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'.
- 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.
- 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.
- 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:
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.
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:-
- 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.
- 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:
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:-
- Létrejön egy ht nevű hashtable, és három kulcs-érték párt szúr be az Add metódussal.
- 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.




