C# hashtabell med exempel

⚡ Smart sammanfattning

Hashtable i C# är en samling från namnrymden System.Collections som lagrar data som nyckel-värde-par, där varje unik nyckel mappas till ett värde och nyckeln ger snabb sökning av det lagrade värdet.

  • 📚 Nyckel-värde-par: En hashtabell lagrar två värden per element, en nyckel och dess värde, istället för det enda värde som innehas av en stack- eller arraylista.
  • Lägga till element: Metoden Add infogar en nyckel och ett värde tillsammans, och varje nyckel i hashtabellen måste vara unik.
  • ???? InnehållerKey och InnehållerVärde: Dessa metoder returnerar sant eller falskt så att du kan testa om en nyckel eller ett värde redan finns.
  • 🔁 Läsvärden: Egenskapen Keys med en ICollection, eller en DictionaryEntry-loop, låter dig läsa varje lagrat värde i tur och ordning.
  • 🛠️ Metoder och egenskaper: Ta bort, rensa, räkna, nycklar och värden hanterar och inspekterar innehållet i hashtabellen.
  • 🤖 AI-hjälp: GitHub Copilot stöder Hashtable-kod, medan moderna C# och ML.NET föredrar den generiska Dictionary för typsäkra nyckel-värde-data.

C# hashable

Vad är Hashtable i C#?

En hashtabell är en speciell samling som används för att lagra nyckel-värde objekt. Så istället för att bara lagra ett värde som stack, arraylista och kö, lagrar hashtabellen 2 värden. Dessa 2 värden utgör ett element i hashtabellen.

Nedan finns några exempel på hur värden i en hashtabell kan se ut.

{ "001" , ".Net" }
{ "002" , ".C#" }
{ "003" , "ASP.Net" }

Ovan har vi 3 nyckelvärdespar. Nycklarna för varje element är 001, 002 respektive 003. Värdena för varje nyckelvärdespar är ". Net", "C#" och "ASP.Net" respektive.

Låt oss titta på de funktioner som är tillgängliga för Hashtable-samlingen mer detaljerat.

Deklaration av hashtabellen

Deklarationen av en hashtabell visas nedan. En hashtabell skapas med hjälp av hashable datatypen. Nyckelordet "nya" används för att skapa ett objekt i en hashtabell. Objektet tilldelas sedan variabeln ht.

Hashtable ht = new Hashtable()

Lägga till element i hashtabellen

Add-metoden används för att lägga till ett element till . Den allmänna syntaxen för uttalandet ges nedan

HashTable.add("key","value")

Exempel 1:

Kom ihåg att varje element i hashtabellen består av 2 värden, ett är nyckeln och det andra är värdet.

Låt oss nu se att det här fungerar på kodnivå. All ovan nämnda kod kommer att skrivas till vår konsolapplikation.

Koden kommer att skrivas till vår Program.cs-fil. I programmet nedan kommer vi att skriva koden för att se hur vi kan använda de ovan nämnda metoderna.

För nu i vårt exempel kommer vi bara att titta på hur vi kan skapa en hashtabell , lägga till element i hashtabellen och visa dem därefter.

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 Förklaring:-

  1. Först deklarerar vi hashable-variabeln med hjälp av hashable-datatypen genom att använda nyckelordet "New". Namnet på variabeln som definierar är 'ht'.
  2. Vi lägger sedan till element i hashtabellen med hjälp av Add-metoden. Kom ihåg att vi måste lägga till både ett nyckel- och värdeelement när vi lägger till något i hashtabellen.
  3. Det finns inget direkt sätt att visa elementen i en hashtabell.
    • För att visa hashtabellen måste vi först hämta listan med nycklar (001, 002 och 003) från hashtabellen.
    • Detta görs via ICollection-gränssnittet. Detta är en speciell datatyp som kan användas för att lagra nycklarna till en hashbar samling. Vi tilldelar sedan hashtabellsamlingens nycklar till variabeln 'nycklar'.
  4. Nästa för varje nyckelvärde får vi det associerade värdet i hashtabellen genom att använda satsen ht[k].

Om ovanstående kod anges korrekt och programmet körs kommer följande utdata att visas.

Produktion:

Hastbar i C#

Låt oss titta på några fler tillgängliga metoder för hashtabeller.

Innehåller nyckel

Denna metod används för att se om en nyckel finns i hashtabellen. Nedan är den allmänna syntaxen för detta uttalande. Satsen returnerar true om nyckeln finns, annars returnerar den värdet false.

Hashtable.Containskey(key)

InnehållerVärde

Denna metod används för att se om ett värde finns i hashtabellen. Nedan är den allmänna syntaxen för detta uttalande. Satsen kommer att returnera sant om värdet finns, annars returnerar det värdet false.

Hashtable.ContainsValue(value)

Exempel 2:

Låt oss ändra koden i vår Konsolapplikation för att visa upp hur vi kan använda metoderna "Containskey" och "ContainsValue".

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 Förklaring:-

  1. Först använder vi ContainsKey-metoden för att se om nyckeln finns i hashtabellen. Denna metod kommer att returnera sant om nyckeln finns i hashtabellen. Denna metod bör returnera sant eftersom nyckeln finns i hashtabellen.
  2. Vi använder sedan ContainsValue-metoden för att se om värdet finns i hashtabellen. Denna metod kommer att returnera "true" eftersom värdet finns i hashtabellen.

Om ovanstående kod anges korrekt och programmet körs kommer följande utdata att visas.

Produktion:

Hastbar i C#

Från utgången kan du tydligt se att både nyckeln och värdet som söks upp finns i hashtabellen.

Hur man loopar igenom en C# hashtabell

Exemplen ovan läser värden genom Keys-samlingen, men en hashtabell kan läsas på ett renare sätt. En foreach-loop över en DictionaryEntry ger dig nyckeln och värdet för varje element tillsammans i ett enda steg, vilket är det vanligaste sättet att läsa en hashtabell.

Steg 1) Skapa en hashtabell och lägg till tre nyckel-värde-par i den.

Steg 2) Loopa över hashtabellen med en DictionaryEntry-variabel och läs sedan egenskaperna Key och Value för varje post.

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 Förklaring:-

  1. En hashtabell med namnet ht skapas och tre nyckel-värde-par infogas med Add-metoden.
  2. Foreach-slingan tilldelar varje element till en DictionaryEntry, vars Key- och Value-egenskaper exponerar de två halvorna av paret.

När programmet körs skriver det ut varje tangent bredvid dess värde, till exempel 101 – JavaEftersom en hashtabell inte behåller insättningsordningen kan paren visas i en annan ordning än de lades till. För att bara läsa nycklarna, loopa över Keys-samlingen, och för att bara läsa värdena, loopa över Values-samlingen istället.

C# Hashtable-metoder och egenskaper

Hashtable-klassen visar en liten uppsättning metoder och egenskaper som täcker nästan alla uppgifter du behöver, från att lägga till och ta bort par till att kontrollera medlemskap och räkna element. De mest användbara medlemmarna listas nedan.

Medlem Typ BESKRIVNING
Lägg till (nyckel, värde) Metod Infogar ett nytt nyckel- och värdepar; nyckeln måste vara unik.
Ta bort (nyckel) Metod Tar bort elementet som matchar den angivna nyckeln.
Klar() Metod Tar bort alla nyckel-värde-par från hashtabellen.
InnehållerKey(nyckel) Metod Returnerar sant när den angivna nyckeln finns.
InnehållerVärde(värde) Metod Returnerar sant när det angivna värdet finns.
Att Räkna Fast egendom Hämtar antalet lagrade nyckel-värde-par.
Nycklar Fast egendom Returnerar en samling av alla nycklar.
Värden Fast egendom Returnerar en samling av alla värden.

Eftersom varje nyckel är hashad, lokaliserar ContainsKey och indexeraren ett element i nästan konstant tid, vilket är det som gör en hashtabell så användbar för snabba sökningar.

Skillnaden mellan hashtable och ordbok i C#

En hashtabell och en ordbok lagrar båda nyckel-värde-par, och båda tillhör den bredare familjen av C# samlingarDen viktiga skillnaden är typsäkerhet, och den skillnaden avgör vilken du bör använda i ny kod.

  • Typ säkerhet: En hashtabell lagrar varje nyckel och värde som ett objekt, medan en ordbok är generisk, så kompilatorn kontrollerar vilka typer du använder.
  • Namnrymd: Hashtable finns i System.Collections, medan Dictionary finns i System.Collections.Generic.
  • BoxIng: En hashtable lagrar värden för typer som int, men en generisk ordbok lagrar dem direkt och undviker den kostnaden.
  • Prestanda: Dictionary är vanligtvis snabbare eftersom den inte behöver casting back från objektet när du läser ett värde.
  • Trådsäkerhet: Hashtable erbjuder Synchormoniserad omslagsplast för en skribent med många läsare, medan samtidig kod vanligtvis väljer ConcurrentDictionary.

För alla nya projekt är den generiska ordboken det rekommenderade valet, och den icke-generiska hashtabellen förekommer huvudsakligen i äldre kod.

Vanliga frågor

Metoden Remove tar bort elementet med en given nyckel och minskar Count med ett. Om nyckeln inte finns händer ingenting, så anropa ContainsKey först när du måste vara säker på att nyckeln finns.

Nej. Varje nyckel i en hashtabell måste vara unik. Att anropa Add med en nyckel som redan finns utlöser ett ArgumentException. Du kan dock lagra samma värde under flera olika nycklar utan att det uppstår något fel.

En hashtabell stöder en skribent med många läsare på ett säkert sätt. För flera skrivtrådar, omslut den med hjälp av hashtabellen.Synchronized, eller föredra ConcurrentDictionary från System.Collections.Concurrent, som hanterar samtidiga läsningar och skrivningar utan externa lås.

Att söka upp ett värde efter nyckel sker i genomsnitt på nästan konstant O(1) tid, eftersom nyckeln hashas för att hitta sin bucket. Kraftiga hashkollisioner kan sakta ner det, men det är sällsynt med väldistribuerade nycklar.

Ett värde kan vara null, men en nyckel kan inte det. Att skicka en null-nyckel till Add eller indexeraren utlöser ett ArgumentNullException. Varje nyckel måste också vara unik och får inte ändras medan den lagras.

En hashtabell har ingen ordning, så den kan inte sorteras på plats. Kopiera dess nycklar till en lista eller en ArrayList, sortera listan och läs sedan värden efter nyckel. En SortedList håller sina poster ordnade automatiskt.

Ja. GitHub Copilot skriver Hashtable-deklarationer, Add-anrop och DictionaryEntry-loopar från en kort kommentar eller ett metodnamn. Den föreslår ofta den generiska Dictionary istället, eftersom det är den rekommenderade samlingen för ny C#-kod.

ML.NET-träningsdata flödar genom typade samlingar och IDataView-pipelinen snarare än en hashtabell. Hashbaserade nyckel-värde-mappningar stöder dock fortfarande funktionssökningar, ordförrådskodning och cachning runt en maskininlärningsmodell.

Sammanfatta detta inlägg med: