C# Hashtable s primjerima
โก Pametni saลพetak
Hashtable u C# je kolekcija iz imenskog prostora System.Collections koja pohranjuje podatke kao parove kljuฤ-vrijednost, gdje se svaki jedinstveni kljuฤ mapira na vrijednost, a kljuฤ omoguฤuje brzo pretraลพivanje te pohranjene vrijednosti.

ล to je Hashtable u C#?
Rasprลกena tablica je posebna kolekcija koja se koristi za pohranu stavki kljuฤ-vrijednost. Dakle, umjesto pohranjivanja samo jedne vrijednosti kao stog, popis polja i red ฤekanja, hash tablica pohranjuje 2 vrijednosti. Ove 2 vrijednosti ฤine element hash tablice.
Ispod su neki primjeri kako bi vrijednosti hash tablice mogle izgledati.
{ "001" , ".Net" }
{ "002" , ".C#" }
{ "003" , "ASP.Net" }
Gore imamo 3 para kljuฤeva vrijednosti. Kljuฤevi svakog elementa su redom 001, 002 i 003. Vrijednosti svakog para kljuฤ vrijednosti su ".Netoโ, โC#โ odnosno โASP.Netโ.
Pogledajmo detaljnije operacije dostupne za kolekciju Hashtable.
Deklaracija Hashtable
Deklaracija Hashtable prikazana je u nastavku. Hashtable se kreira uz pomoฤ tipa podataka Hashtable. Kljuฤna rijeฤ "new" koristi se za stvaranje objekta Hashtable. Objekt se tada dodjeljuje varijabli ht.
Hashtable ht = new Hashtable()
Dodavanje elemenata u Hashtable
Metoda Add koristi se za dodavanje elementa na red. Opฤa sintaksa izjave data je u nastavku
HashTable.add("key","value")
Primjer 1:
Zapamtite da se svaki element hash tablice sastoji od 2 vrijednosti, jedna je kljuฤ, a druga je vrijednost.
Sada, da vidimo kako ovo radi na razini koda. Sav dolje navedeni kod bit ฤe zapisan u naลกu konzolnu aplikaciju.
Kod ฤe biti zapisan u naลกu datoteku Program.cs. U donjem programu napisat ฤemo kod da vidimo kako moลพemo koristiti gore navedene metode.
Za sada ฤemo u naลกem primjeru samo pogledati kako moลพemo stvoriti hash tablicu, dodati elemente u hash tablicu i prikazati ih u skladu s tim.
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 Obrazloลพenje:-
- Prvo, deklariramo varijablu hashtable koristeฤi tip podataka Hashtable koristeฤi kljuฤnu rijeฤ "New". Naziv definirane varijable je 'ht'.
- Zatim dodajemo elemente u hash tablicu pomoฤu metode Add. Ne zaboravite da moramo dodati i kljuฤ i element vrijednosti kada neลกto dodajemo u hash tablicu.
- Ne postoji izravan naฤin za prikaz elemenata hash tablice.
- Kako bismo prikazali hash tablicu, prvo moramo dobiti popis kljuฤeva (001, 002 i 003) iz hash tablice.
- To se radi preko ICollection suฤelja. Ovo je poseban tip podataka koji se moลพe koristiti za pohranjivanje kljuฤeva kolekcija hashtable. Zatim kljuฤeve zbirke hashtable dodjeljujemo varijabli 'keys'.
- Zatim za svaku vrijednost kljuฤa dobivamo pridruลพenu vrijednost u tablici rasprลกivanja koriลกtenjem izjave ht[k].
Ako se gornji kod ispravno unese i program se pokrene, prikazat ฤe se sljedeฤi izlaz.
Izlaz:
Pogledajmo joลก neke metode dostupne za hash tablice.
SadrลพiKljuฤ
Ova se metoda koristi da se vidi je li kljuฤ prisutan u tablici rasprลกivanja. Ispod je opฤa sintaksa ove izjave. Naredba ฤe vratiti true ako kljuฤ postoji, inaฤe ฤe vratiti vrijednost false.
Hashtable.Containskey(key)
SadrลพiVrijednost
Ova se metoda koristi da se vidi je li vrijednost prisutna u tablici rasprลกivanja. Ispod je opฤa sintaksa ove izjave. Naredba ฤe vratiti true ako vrijednost postoji, inaฤe ฤe vratiti vrijednost false.
Hashtable.ContainsValue(value)
Primjer 2:
Promijenimo kod u naลกem Konzolna aplikacija kako bismo pokazali kako moลพemo koristiti metode "Containskey" i "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 Obrazloลพenje:-
- Prvo koristimo metodu ContainsKey da vidimo je li kljuฤ prisutan u hash tablici. Ova metoda ฤe vratiti true ako je kljuฤ prisutan u hash tablici. Ova bi metoda trebala vratiti true buduฤi da kljuฤ postoji u hash tablici.
- Zatim koristimo metodu ContainsValue da vidimo je li vrijednost prisutna u hash tablici. Ova ฤe metoda vratiti 'true' buduฤi da vrijednost postoji u tablici rasprลกivanja.
Ako se gornji kod ispravno unese i program se pokrene, prikazat ฤe se sljedeฤi izlaz.
Izlaz:
Iz izlaza moลพete jasno vidjeti da su i kljuฤ i vrijednost koji se pretraลพuju prisutni u hash tablici.
Kako proฤi kroz C# Hashtable
Gornji primjeri ฤitaju vrijednosti kroz kolekciju Keys, ali Hashtable se moลพe obraditi na ฤiลกฤi naฤin. Petlja foreach iznad DictionaryEntry vam predaje kljuฤ i vrijednost svakog elementa zajedno u jednom prolazu, ลกto je najฤeลกฤi naฤin ฤitanja Hashtable-a.
Korak 1) Napravite Hashtable i dodajte mu tri para kljuฤ-vrijednost.
Korak 2) Proฤite kroz Hashtable s varijablom DictionaryEntry, a zatim proฤitajte svojstva Key i Value svakog unosa.
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 Obrazloลพenje:-
- Stvara se Hashtable pod nazivom ht, a tri para kljuฤ-vrijednost ubacuju se metodom Add.
- Petlja foreach dodjeljuje svaki element objektu DictionaryEntry, ฤija svojstva Key i Value otkrivaju dvije polovice para.
Kada se program pokrene, ispisuje svaki kljuฤ pored njegove vrijednosti, kao ลกto je 101 โ JavaBuduฤi da Hashtable ne zadrลพava redoslijed umetanja, parovi se mogu pojaviti u drugaฤijem redoslijedu od onog u kojem su dodani. Za ฤitanje samo kljuฤeva, petljom prijeฤite preko kolekcije Keys, a za ฤitanje samo vrijednosti, petljom prijeฤite preko kolekcije Values.
C# metode i svojstva hashtable-a
Klasa Hashtable nudi mali skup metoda i svojstava koja pokrivaju gotovo svaki zadatak koji ฤe vam trebati, od dodavanja i uklanjanja parova do provjere ฤlanstva i brojanja elemenata. Najkorisniji ฤlanovi navedeni su u nastavku.
| ฤlan | Tip | Description |
|---|---|---|
| Dodaj(kljuฤ, vrijednost) | naฤin | Umeฤe novi par kljuฤa i vrijednosti; kljuฤ mora biti jedinstven. |
| Ukloni (kljuฤ) | naฤin | Briลกe element koji odgovara navedenom kljuฤu. |
| ฤisto() | naฤin | Uklanja svaki par kljuฤ-vrijednost iz Hashtable-a. |
| SadrลพiKljuฤ(kljuฤ) | naฤin | Vraฤa vrijednost true kada je zadani kljuฤ prisutan. |
| SadrลพiVrijednost(vrijednost) | naฤin | Vraฤa vrijednost true kada je zadana vrijednost prisutna. |
| Raฤunati | Svojstvo | Vraฤa broj pohranjenih parova kljuฤ-vrijednost. |
| Tipke | Svojstvo | Vraฤa kolekciju svih kljuฤeva. |
| Vrijednosti | Svojstvo | Vraฤa kolekciju svih vrijednosti. |
Buduฤi da je svaki kljuฤ hashiran, ContainsKey i indekser lociraju element u gotovo konstantnom vremenu, ลกto Hashtable ฤini tako korisnim za brze pretrage.
Razlika izmeฤu hashtablea i rjeฤnika u C#
Hashtable i Dictionary pohranjuju parove kljuฤ-vrijednost i oba pripadaju ลกiroj obitelji C#. kolekcijeVaลพna razlika je sigurnost tipova, a ta razlika odluฤuje koji biste trebali koristiti u novom kodu.
- Sigurnost tipa: Hashtable pohranjuje svaki kljuฤ i vrijednost kao objekt, dok Dictionary je generiฤki, pa kompajler provjerava tipove koje koristite.
- Prostor: Hashtable se nalazi u System.Collections, dok se Dictionary nalazi u System.Collections.Generic.
- BoxING: Hashtable pohranjuje tipove vrijednosti kao ลกto je int, ali generiฤki rjeฤnik ih pohranjuje izravno i izbjegava taj troลกak.
- Performance: Rjeฤnik je obiฤno brลพi jer ne treba vraฤanje vrijednosti iz objekta kada se ฤita vrijednost.
- Sigurnost niti: Hashtable nudi Synckronizirani omotaฤ za jednog pisca s mnogo ฤitatelja, dok konkurentni kod obiฤno odabire ConcurrentDictionary.
Za svaki novi projekt, generiฤki Dictionary je preporuฤeni izbor, a negeneriฤki Hashtable se uglavnom pojavljuje u starijem kodu.




