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.

  • ๐Ÿ“š Nรธkkelverdi-par: En hashtabell lagrer to verdier per element, en nรธkkel og dens verdi, i stedet for den enkle verdien som holdes av en stakk- eller arrayliste.
  • โž• Legge til elementer: Add-metoden setter inn en nรธkkel og en verdi sammen, og hver nรธkkel i hashtabellen mรฅ vรฆre unik.
  • ๐Ÿ‘€ InneholderKey og InneholderVerdi: Disse metodene returnerer sann eller usann, slik at du kan teste om en nรธkkel eller en verdi allerede finnes.
  • ๐Ÿ” Leseverdier: Keys-egenskapen med en ICollection, eller en DictionaryEntry-lรธkke, lar deg lese hver lagrede verdi etter tur.
  • ๐Ÿ› ๏ธ Metoder og egenskaper: Fjern, Tรธm, Antall, Nรธkler og Verdier administrerer og inspiserer innholdet i hashtabellen.
  • ๐Ÿค– AI-hjelp: GitHub Copilot stillaserer Hashtable-kode, mens moderne C# og ML.NET favoriserer den generiske ordboken for typesikre nรธkkelverdi-data.

C# hashable

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.

Hastbar i 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 Forklaring:-

  1. Fรธrst erklรฆrer vi hashable-variabelen ved รฅ bruke hashable-datatypen ved รฅ bruke nรธkkelordet "New". Navnet pรฅ variabelen definerer er 'ht'.
  2. 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.
  3. 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'.
  4. 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:

Hastbar i C#

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.

Hastbar i 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 Forklaring:-

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

Hastbar i C#

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

  1. En hashtabell med navnet ht opprettes, og tre nรธkkelverdi-par settes inn med Add-metoden.
  2. 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.

Spรธrsmรฅl og svar

Remove-metoden sletter elementet med en gitt nรธkkel og reduserer Count med รฉn. Hvis nรธkkelen ikke finnes, skjer ingenting, sรฅ kall ContainsKey fรธrst nรฅr du mรฅ vรฆre sikker pรฅ at nรธkkelen er til stede.

Nei. Hver nรธkkel i en hashtabell mรฅ vรฆre unik. ร… kalle Add med en nรธkkel som allerede finnes, kaster et ArgumentException. Du kan imidlertid lagre den samme verdien under flere forskjellige nรธkler uten feil.

En hashtable stรธtter รฉn skribent med mange lesere pรฅ en sikker mรฅte. For flere skrivetrรฅder, bruk hashtable.Synchronized, eller foretrekker ConcurrentDictionary fra System.Collections.Concurrent, som hรฅndterer samtidige lesninger og skrivinger uten eksterne lรฅser.

ร… slรฅ opp en verdi etter nรธkkel kjรธrer i gjennomsnitt pรฅ nesten konstant O(1) tid, fordi nรธkkelen hashes for รฅ finne sin bรธtte. Kraftige hashkollisjoner kan bremse den, men det er sjeldent med godt distribuerte nรธkler.

En verdi kan vรฆre null, men en nรธkkel kan ikke det. ร… sende en nullnรธkkel til Add eller indekseren utlรธser en ArgumentNullException. Hver nรธkkel mรฅ ogsรฅ vรฆre unik og skal ikke endres mens den lagres.

En hashtabell har ingen rekkefรธlge, sรฅ den kan ikke sorteres pรฅ plass. Kopier nรธklene til en liste eller en ArrayList, sorter listen, og les deretter verdier etter nรธkkel. En SortedList holder oppfรธringene sine ordnet automatisk.

Ja. GitHub Copilot skriver Hashtable-deklarasjoner, Add-kall og DictionaryEntry-lรธkker fra en kort kommentar eller et metodenavn. Den foreslรฅr ofte den generiske Dictionary i stedet, siden det er den anbefalte samlingen for ny C#-kode.

ML.NET-treningsdata flyter gjennom typede samlinger og IDataView-pipelinen i stedet for en hashtabell. Hashbaserte nรธkkelverdikart stรธtter imidlertid fortsatt funksjonsoppslag, vokabularkoding og mellomlagring rundt en maskinlรฆringsmodell.

Oppsummer dette innlegget med: