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.
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 kö. 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.
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:-
- 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'.
- 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.
- 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'.
- 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:
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".
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:-
- 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.
- 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:
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:-
- En hashtabell med namnet ht skapas och tre nyckel-värde-par infogas med Add-metoden.
- 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.





