C# hashtabell med eksempler
โก Smart oppsummering
Hashtable i C# er en samling fra navnerommet System.Collections som lagrer data som nรธkkel-verdi-par, der hver unike nรธkkel tilordnes en verdi, og nรธkkelen gir raskt oppslag av den lagrede verdien.

Hva er Hashtable i C#?
En hash-tabell er en spesiell samling som brukes til รฅ lagre nรธkkelverdi-elementer. Sรฅ i stedet for รฅ lagre bare รฉn verdi som stabelen, arraylisten og kรธen, lagrer hashtabellen 2 verdier. Disse 2 verdiene utgjรธr et element i hashtabellen.
Nedenfor er noen eksempler pรฅ hvordan verdiene i en hashtabell kan se ut.
{ "001" , ".Net" }
{ "002" , ".C#" }
{ "003" , "ASP.Net" }
Ovenfor har vi 3 nรธkkelverdipar. Nรธklene til hvert element er henholdsvis 001, 002 og 003. Verdiene til hvert nรธkkelverdipar er ". Net", "C#" og "ASP.Net" henholdsvis.
La oss se pรฅ operasjonene som er tilgjengelige for Hashtable-samlingen mer detaljert.
Erklรฆring fra hashtabellen
Erklรฆringen til en hashtabell vises nedenfor. En hashtabell lages ved hjelp av hashtable-datatypen. Det "nye" nรธkkelordet brukes til รฅ lage et objekt av en hashtabell. Objektet blir deretter tilordnet variabelen ht.
Hashtable ht = new Hashtable()
Legge til elementer i hashtabellen
Add-metoden brukes til รฅ legge til et element pรฅ kรธen. Den generelle syntaksen til setningen er gitt nedenfor
HashTable.add("key","value")
Eksempel 1:
Husk at hvert element i hashtabellen bestรฅr av 2 verdier, den ene er nรธkkelen og den andre er verdien.
La oss nรฅ se at dette fungerer pรฅ kodenivรฅ. All koden nedenfor vil bli skrevet til vรฅr konsollapplikasjon.
Koden vil bli skrevet til vรฅr Program.cs-fil. I programmet nedenfor vil vi skrive koden for รฅ se hvordan vi kan bruke de ovennevnte metodene.
For nรฅ i vรฅrt eksempel vil vi bare se pรฅ hvordan vi kan lage en hashtabell , legge til elementer i hashtabellen og vise dem deretter.
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 Forklaring:-
- Fรธrst erklรฆrer vi hashable-variabelen ved รฅ bruke hashable-datatypen ved รฅ bruke nรธkkelordet "New". Navnet pรฅ variabelen definerer er 'ht'.
- Vi legger deretter til elementer i hash-tabellen ved รฅ bruke Add-metoden. Husk at vi mรฅ legge til bรฅde et nรธkkel- og verdielement nรฅr vi legger til noe i hashtabellen.
- Det er ingen direkte mรฅte รฅ vise elementene i en hash-tabell pรฅ.
- For รฅ vise hashtabellen mรฅ vi fรธrst hente listen over nรธkler (001, 002 og 003) fra hashtabellen.
- Dette gjรธres via ICollection-grensesnittet. Dette er en spesiell datatype som kan brukes til รฅ lagre nรธklene til en hashbar samling. Vi tildeler deretter nรธklene til hashtabellsamlingen til variabelen 'nรธkler'.
- Neste for hver nรธkkelverdi fรฅr vi den tilhรธrende verdien i hashtabellen ved รฅ bruke setningen ht[k].
Hvis koden ovenfor angis riktig og programmet kjรธres, vil fรธlgende utgang vises.
Utgang:
La oss se pรฅ noen flere metoder som er tilgjengelige for hashtabeller.
Inneholder nรธkkel
Denne metoden brukes til รฅ se om en nรธkkel er til stede i hashtabellen. Nedenfor er den generelle syntaksen til denne uttalelsen. Utsagnet vil returnere sant hvis nรธkkelen eksisterer, ellers vil det returnere verdien usann.
Hashtable.Containskey(key)
Inneholder Verdi
Denne metoden brukes til รฅ se om en verdi er tilstede i hashtabellen. Nedenfor er den generelle syntaksen til denne uttalelsen. Utsagnet vil returnere sant hvis verdien eksisterer, ellers vil det returnere verdien usann.
Hashtable.ContainsValue(value)
Eksempel 2:
La oss endre koden i vรฅr Konsollsรธknad for รฅ vise frem hvordan vi kan bruke ยซContainskeyยป- og ยซContainsValueยป-metoden.
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 Forklaring:-
- Fรธrst bruker vi ContainsKey-metoden for รฅ se om nรธkkelen finnes i hashtabellen. Denne metoden vil returnere sann hvis nรธkkelen er til stede i hashtabellen. Denne metoden skal returnere true siden nรธkkelen eksisterer i hashtabellen.
- Vi bruker deretter ContainsValue-metoden for รฅ se om verdien finnes i hashtabellen. Denne metoden vil returnere "true" siden verdien eksisterer i hashtabellen.
Hvis koden ovenfor angis riktig og programmet kjรธres, vil fรธlgende utgang vises.
Utgang:
Fra utgangen kan du tydelig se at bรฅde nรธkkelen og verdien som sรธkes er tilstede i hash-tabellen.
Slik gรฅr du gjennom en C# hashtabell
Eksemplene ovenfor leser verdier gjennom Keys-samlingen, men en hashtabell kan leses pรฅ en renere mรฅte. En foreach-lรธkke over en DictionaryEntry gir deg nรธkkelen og verdien til hvert element sammen i รฉn omgang, som er den vanligste mรฅten รฅ lese en hashtabell pรฅ.
Trinn 1) Lag en hashtabell og legg til tre nรธkkel-verdi-par i den.
Trinn 2) Gรฅ over hashtabellen med en DictionaryEntry-variabel, og les deretter Key- og Value-egenskapene for hver oppfรธring.
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 Forklaring:-
- En hashtabell med navnet ht opprettes, og tre nรธkkelverdi-par settes inn med Add-metoden.
- Foreach-lรธkken tilordner hvert element til en DictionaryEntry, hvis Key- og Value-egenskaper eksponerer de to halvdelene av paret.
Nรฅr programmet kjรธrer, skriver det ut hver nรธkkel ved siden av verdien, for eksempel 101 โ JavaFordi en hashtabell ikke beholder innsettingsrekkefรธlgen, kan parene vises i en annen rekkefรธlge enn de ble lagt til. For รฅ bare lese nรธklene, lรธp over Keys-samlingen, og for รฅ bare lese verdiene, lรธp over Values-samlingen i stedet.
C# Hashtable-metoder og egenskaper
Hashtable-klassen eksponerer et lite sett med metoder og egenskaper som dekker nesten alle oppgaver du trenger, fra รฅ legge til og fjerne par til รฅ sjekke medlemskap og telle elementer. De mest nyttige medlemmene er listet opp nedenfor.
| Medlem | typen | Tekniske beskrivelser |
|---|---|---|
| Legg til (nรธkkel, verdi) | Metode | Setter inn et nytt nรธkkel- og verdipar; nรธkkelen mรฅ vรฆre unik. |
| Fjern (nรธkkel) | Metode | Sletter elementet som samsvarer med den angitte nรธkkelen. |
| Klar() | Metode | Fjerner alle nรธkkel-verdi-par fra hashtabellen. |
| InneholderKey(nรธkkel) | Metode | Returnerer sann nรฅr den gitte nรธkkelen er tilstede. |
| InneholderVerdi(verdi) | Metode | Returnerer sann nรฅr den gitte verdien er tilstede. |
| Telle | Eiendom | Henter antall nรธkkel-verdi-par som er lagret. |
| Keys | Eiendom | Returnerer en samling av alle nรธklene. |
| Verdier | Eiendom | Returnerer en samling av alle verdiene. |
Fordi hver nรธkkel er hashet, finner ContainsKey og indekseren et element i nesten konstant tid, noe som gjรธr en hashtabell sรฅ nyttig for raske oppslag.
Forskjellen mellom hashtable og ordbok i C#
Bรฅde en hashtabell og en ordbok lagrer nรธkkelverdipar, og begge tilhรธrer den bredere C#-familien. samlingerDen viktige forskjellen er typesikkerhet, og den forskjellen avgjรธr hvilken du bรธr gripe etter i ny kode.
- Type sikkerhet: En hashtabell lagrer hver nรธkkel og verdi som et objekt, mens ordbok er generisk, sรฅ kompilatoren sjekker typene du bruker.
- navnerom: Hashtable ligger i System.Collections, mens Dictionary ligger i System.Collections.Generic.
- Boxing: En hashtable inneholder verdier som int, men en generisk ordbok lagrer dem direkte og unngรฅr den kostnaden.
- Ytelse: Ordboken er vanligvis raskere fordi den ikke trenger รฅ caste tilbake fra objektet nรฅr du leser en verdi.
- Trรฅdsikkerhet: Hashtable tilbyr Syncchronized wrapper for รฉn forfatter med mange lesere, mens samtidig kode vanligvis velger ConcurrentDictionary.
For ethvert nytt prosjekt er den generiske ordboken det anbefalte valget, og den ikke-generiske hashtabellen vises hovedsakelig i eldre kode.




