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.

  • 📚 Perechi cheie-valoare: Un tabel hash stochează două valori per element, o cheie și valoarea sa, în loc de valoarea unică deținută de o stivă sau o listă de matrice.
  • Adăugarea de elemente: Metoda Add inserează o cheie și o valoare împreună, iar fiecare cheie din tabelul Hash trebuie să fie unică.
  • 👀 ContainsKey și ContainsValue: Aceste metode returnează true sau false, astfel încât să puteți testa dacă o cheie sau o valoare există deja.
  • 🔁 Valori de citire: Proprietatea Keys cu o ICollection sau o buclă DictionaryEntry vă permite să citiți pe rând fiecare valoare stocată.
  • 🛠️ Metode și proprietăți: Funcțiile Remove, Clear, Count, Keys și Values ​​gestionează și inspectează conținutul tabelului hash.
  • 🤖 Asistență AI: GitHub Copilot folosește schele de cod Hashtable, în timp ce C# și ML.NET moderne preferă Dicționarul generic pentru date cheie-valoare sigure pentru tipuri.

C# Hashtable

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ță.

Hashtable în 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 Explicaţie:-

  1. Mai întâi, declarăm variabila hashtable folosind tipul de date Hashtable folosind cuvântul cheie „Nou”. Numele variabilei definite este „ht”.
  2. 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.
  3. 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”.
  4. Î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:

Hashtable în C#

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

Hashtable în 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 Explicaţie:-

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

Hashtable în C#

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

  1. Se creează un tabel hash numit ht și se inserează trei perechi cheie-valoare cu metoda Add.
  2. 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.

Întrebări frecvente

Metoda Remove șterge elementul cu o cheie dată și reduce Count cu unu. Dacă cheia nu există, nu se întâmplă nimic, așa că apelați mai întâi ContainsKey atunci când trebuie să vă asigurați că cheia este prezentă.

Nu. Fiecare cheie dintr-un Hashtable trebuie să fie unică. Apelarea funcției Add cu o cheie care există deja generează o ArgumentException. Cu toate acestea, puteți stoca aceeași valoare sub mai multe chei diferite fără nicio eroare.

Un Hashtable permite accesul în siguranță a unui scriitor cu mai mulți cititori. Pentru mai multe fire de scriere, încapsulați-le folosind Hashtable.Syncchronized sau preferați ConcurrentDictionary din System.Collections.Concurrent, care gestionează citirile și scrierile concurente fără blocări externe.

Căutarea unei valori după cheie se execută în medie într-un timp O(1) aproape constant, deoarece cheia este hașată pentru a-și găsi compartimentul. Coliziunile hash puternice o pot încetini, dar acest lucru este rar în cazul cheilor bine distribuite.

O valoare poate fi nulă, dar o cheie nu. Transmiterea unei chei nule către Add sau indexator generează o excepție ArgumentNullException. Fiecare cheie trebuie să fie unică și nu ar trebui să se modifice în timp ce este stocată.

Un tabel hash nu păstrează o ordine, deci nu poate fi sortat la locul lui. Copiați cheile sale într-o listă sau într-un ArrayList, sortați acea listă, apoi citiți valorile după cheie. Un SortedList își păstrează intrările ordonate automat.

Da. GitHub Copilot scrie declarații Hashtable, apeluri Add și bucle DictionaryEntry dintr-un comentariu scurt sau un nume de metodă. Adesea sugerează în schimb Dicționarul generic, deoarece aceasta este colecția recomandată pentru codul C# nou.

Datele de antrenament ML.NET circulă prin colecții tipizate și canalul IDataView, mai degrabă decât printr-un Hashtable. Cu toate acestea, hărțile cheie-valoare bazate pe hash încă acceptă căutări de caracteristici, codificare vocabular și memorare în cache în jurul unui model de învățare automată.

Rezumați această postare cu: