C# Hashtable cu exemple
โก Rezumat inteligent
Un tabel hash รฎn C# este o colecศie din spaศiul de nume System.Collections care stocheazฤ date ca perechi cheie-valoare, unde fiecare cheie unicฤ este asociatฤ cu o valoare, iar cheia oferฤ o cฤutare rapidฤ a acelei valori stocate.

Ce este Hashtable รฎn C#?
Un tabel hash este o colecศie specialฤ care este utilizatฤ pentru a stoca elemente cheie-valoare. Deci, รฎn loc sฤ stocheze o singurฤ valoare, cum ar fi stiva, lista de matrice ศi coada, tabelul hash stocheazฤ 2 valori. Aceste 2 valori formeazฤ un element al tabelului hash.
Mai jos sunt cรขteva exemple despre cum ar putea arฤta valorile unui tabel hash.
{ "001" , ".Net" }
{ "002" , ".C#" }
{ "003" , "ASP.Net" }
Mai sus avem 3 perechi valori cheie. Cheile fiecฤrui element sunt 001, 002 ศi, respectiv, 003. Valorile fiecฤrei perechi valori cheie sunt โ.Netโ, โC#โ ศi, respectiv, โASP.Netโ.
Sฤ ne uitฤm la operaศiunile disponibile pentru colecศia Hashtable mai detaliat.
Declaraศia Hashtable
Declaraศia unui Hashtable este prezentatฤ mai jos. Un Hashtable este creat cu ajutorul Hashtable Datatype. Cuvรขntul cheie โnouโ este folosit pentru a crea un obiect al unui Hashtable. Obiectul este apoi atribuit variabilei ht.
Hashtable ht = new Hashtable()
Adฤugarea de elemente la Hashtable
Metoda Add este folositฤ pentru a adฤuga un element la coadฤ. Sintaxa generalฤ a enunศului este datฤ mai jos
HashTable.add("key","value")
Exemplu 1:
Reศineศi cฤ fiecare element al tabelului hash cuprinde 2 valori, una este cheia, iar cealaltฤ este valoarea.
Acum, sฤ vedem asta funcศionรขnd la nivel de cod. Tot codul menศionat mai jos va fi scris รฎn aplicaศia noastrฤ Console.
Codul va fi scris รฎn fiศierul nostru Program.cs. รn programul de mai jos, vom scrie codul pentru a vedea cum putem folosi metodele menศionate mai sus.
Deocamdatฤ, รฎn exemplul nostru, ne vom uita doar la modul รฎn care putem crea un hashtable , adฤugam elemente la hashtable ศi le vom afiศa รฎn consecinศฤ.
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 Explicaลฃie:-
- Mai รฎntรขi, declarฤm variabila hashtable folosind tipul de date Hashtable folosind cuvรขntul cheie โNouโ. Numele variabilei definite este โhtโ.
- Apoi adฤugฤm elemente la tabelul hash folosind metoda Add. Amintiศi-vฤ cฤ trebuie sฤ adฤugฤm atรขt un element cheie, cรขt ศi un element de valoare atunci cรขnd adฤugฤm ceva la tabelul hash.
- Nu existฤ o modalitate directฤ de a afiศa elementele unui tabel hash.
- Pentru a afiศa tabelul hash, mai รฎntรขi trebuie sฤ obศinem lista de chei (001, 002 ศi 003) din tabelul hash.
- Acest lucru se face prin interfaศa ICollection. Acesta este un tip de date special care poate fi folosit pentru a stoca cheile unei colecศii hashtable. Apoi atribuim cheile colecศiei hashtable variabilei โcheiโ.
- รn continuare, pentru fiecare valoare cheie, obศinem valoarea asociatฤ รฎn tabelul hash utilizรขnd instrucศiunea ht[k].
Dacฤ codul de mai sus este introdus corect ศi programul este rulat, va fi afiศatฤ urmฤtoarea ieศire.
ieศire:
Sฤ ne uitฤm la cรขteva metode disponibile pentru tabelele hash.
Conศine cheia
Aceastฤ metodฤ este folositฤ pentru a vedea dacฤ o cheie este prezentฤ รฎn Hashtable. Mai jos este sintaxa generalฤ a acestei declaraศii. Declaraศia va returna true dacฤ cheia existฤ, altfel va returna valoarea false.
Hashtable.Containskey(key)
ConศineValoare
Aceastฤ metodฤ este folositฤ pentru a vedea dacฤ o valoare este prezentฤ รฎn Hashtable. Mai jos este sintaxa generalฤ a acestei declaraศii. Declaraศia va returna true dacฤ Value existฤ, altfel va returna valoarea false.
Hashtable.ContainsValue(value)
Exemplu 2:
Sฤ modificฤm codul din nostru Aplicaศie de consolฤ pentru a arฤta cum putem folosi metoda โ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 Explicaลฃie:-
- รn primul rรขnd, folosim metoda ContainsKey pentru a vedea dacฤ cheia este prezentฤ รฎn hashtable. Aceastฤ metodฤ va returna true dacฤ cheia este prezentฤ รฎn tabelul hash. Aceastฤ metodฤ ar trebui sฤ returneze true, deoarece cheia existฤ รฎn tabelul hash.
- Apoi folosim metoda ContainsValue pentru a vedea dacฤ valoarea este prezentฤ รฎn tabelul hash. Aceastฤ metodฤ va returna โadevฤratโ, deoarece Valoarea existฤ รฎn tabelul hash.
Dacฤ codul de mai sus este introdus corect ศi programul este rulat, va fi afiศatฤ urmฤtoarea ieศire.
ieศire:
Din rezultat, puteศi vedea clar cฤ atรขt cheia, cรขt ศi valoarea cฤutate sunt prezente รฎn tabelul hash.
Cum se parcurge o buclฤ printr-un tabel hash C#
Exemplele de mai sus citesc valori prin colecศia Keys, dar un Hashtable poate fi parcurs รฎntr-un mod mai curat. O buclฤ foreach peste un DictionaryEntry vฤ oferฤ cheia ศi valoarea fiecฤrui element รฎmpreunฤ รฎntr-o singurฤ trecere, aceasta fiind cea mai comunฤ modalitate de a citi un Hashtable.
Pas 1) Creaศi un tabel hash ศi adฤugaศi-i trei perechi cheie-valoare.
Pas 2) Parcurge Hashtable-ul cu o variabilฤ DictionaryEntry, apoi citeศte proprietฤศile Key ศi Value ale fiecฤrei intrฤri.
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 Explicaลฃie:-
- Se creeazฤ un tabel hash numit ht ศi se insereazฤ trei perechi cheie-valoare cu metoda Add.
- Bucla foreach atribuie fiecฤrui element unei entitฤศi DictionaryEntry, ale cฤrei proprietฤศi Key ศi Value expun cele douฤ jumฤtฤศi ale perechii.
Cรขnd programul ruleazฤ, acesta afiศeazฤ fiecare cheie lรขngฤ valoarea sa, cum ar fi 101 โ JavaDeoarece un tabel hash nu pฤstreazฤ ordinea de inserare, perechile pot apฤrea รฎntr-o secvenศฤ diferitฤ de cea รฎn care au fost adฤugate. Pentru a citi doar cheile, parcurgeศi colecศia Keys, iar pentru a citi doar valorile, parcurgeศi รฎn schimb colecศia Values.
Metode ศi proprietฤศi hashtable C#
Clasa Hashtable expune un set mic de metode ศi proprietฤศi care acoperฤ aproape fiecare sarcinฤ de care veศi avea nevoie, de la adฤugarea ศi eliminarea perechilor pรขnฤ la verificarea apartenenศei ศi numฤrarea elementelor. Cei mai utili membri sunt enumeraศi mai jos.
| Membru | Tip | Descriere |
|---|---|---|
| Adฤugaศi(cheie, valoare) | Metodฤ | Introduce o nouฤ pereche cheie-valoare; cheia trebuie sฤ fie unicฤ. |
| Eliminare (cheie) | Metodฤ | ศterge elementul care corespunde cheii specificate. |
| Clar() | Metodฤ | Eliminฤ fiecare pereche cheie-valoare din tabelul hash. |
| ConศineCheia(cheie) | Metodฤ | Returneazฤ โtrueโ cรขnd cheia datฤ este prezentฤ. |
| ConศineValoare(valoare) | Metodฤ | Returneazฤ โtrueโ cรขnd valoarea datฤ este prezentฤ. |
| Conta | Proprietatea | Obศine numฤrul de perechi cheie-valoare stocate. |
| Taste | Proprietatea | Returneazฤ o colecศie a tuturor cheilor. |
| Valori | Proprietatea | Returneazฤ o colecศie a tuturor valorilor. |
Deoarece fiecare cheie este codificatฤ prin hashing, ContainsKey ศi indexorul localizeazฤ un element รฎntr-un timp aproape constant, ceea ce face ca un Hashtable sฤ fie atรขt de util pentru cฤutฤri rapide.
Diferenศa dintre hashtable ศi dicศionar รฎn C#
Un tabel hash ศi un dicศionar stocheazฤ ambele perechi cheie-valoare ศi ambele aparศin familiei mai largi de C# colecศiiDiferenศa importantฤ este siguranศa tipului, iar aceastฤ diferenศฤ decide pe care ar trebui sฤ รฎl alegeศi รฎn codul nou.
- Tip de siguranศฤ: Un Hashtable stocheazฤ fiecare cheie ศi valoare ca obiect, รฎn timp ce Dictionary este generic, deci compilatorul verificฤ tipurile pe care le utilizaศi.
- Spaศiu de nume: Hashtable se aflฤ รฎn System.Collections, รฎn timp ce Dictionary se aflฤ รฎn System.Collections.Generic.
- BoxING: O tabelฤ hash รฎncadreazฤ tipuri de valori precum int, dar un dicศionar generic le stocheazฤ direct ศi evitฤ acest cost.
- Performanศฤ: Dicศionarul este de obicei mai rapid deoarece nu necesitฤ o conversie inversฤ de la obiect atunci cรขnd citeศti o valoare.
- Siguranศa filetului: Hashtable oferฤ Syncรฎncapsulare sincronizatฤ pentru un scriitor cu mulศi cititori, รฎn timp ce codul concurent alege de obicei ConcurrentDictionary.
Pentru orice proiect nou, Dicศionarul generic este alegerea recomandatฤ, iar Hashtable-ul non-generic apare รฎn principal รฎn codul mai vechi.




