C# Hashtable koos näidetega

⚡ Nutikas kokkuvõte

C# räsitabel on System.Collections nimeruumi kogum, mis salvestab andmeid võtme-väärtuse paaridena, kus iga unikaalne võti on seotud väärtusega ja võti võimaldab selle salvestatud väärtuse kiiret otsingut.

  • 📚 Võtme-väärtuse paarid: Hashtable salvestab elemendi kohta kaks väärtust – võtme ja selle väärtuse –, mitte ühe väärtuse, mida hoiab pinu või massiivi loend.
  • ➕ Elementide lisamine: Meetod Add lisab võtme ja väärtuse koos ning iga Hashtable'i võti peab olema unikaalne.
  • ???? SisaldabKey ja SisaldabValue: Need meetodid tagastavad väärtuse tõene või väär, et saaksite testida, kas võti või väärtus on juba olemas.
  • 🔁 Väärtuste lugemine: Omadus Keys koos ICollectioni või DictionaryEntry tsükliga võimaldab teil lugeda kõiki salvestatud väärtusi kordamööda.
  • 🛠️ Meetodid ja omadused: Eemalda, Tühjenda, Loenda, Võtmed ja Väärtused haldavad ja kontrollivad räsitabeli sisu.
  • 🤖 AI abi: GitHub Copilot tugineb räsitavale koodile, samas kui tänapäevased C# ja ML.NET eelistavad tüübikindlate võtme-väärtuse andmete jaoks üldist sõnastikku.

C# Hashtable

Mis on Hashtable C#-s?

Räsitabel on spetsiaalne kogu, mida kasutatakse võtmeväärtuste üksuste salvestamiseks. Nii et selle asemel, et salvestada ainult üks väärtus, nagu virn, massiiviloend ja järjekord, salvestab räsitabel 2 väärtust. Need 2 väärtust moodustavad räsitabeli elemendi.

Allpool on mõned näited selle kohta, kuidas räsitabeli väärtused võivad välja näha.

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

Eespool on 3 võtmeväärtuste paari. Iga elemendi klahvid on vastavalt 001, 002 ja 003. Iga võtmeväärtuste paari väärtused on ".Net“, “C#” ja “ASP.Net”.

Vaatame Hashtable kollektsiooni jaoks saadaolevaid toiminguid üksikasjalikumalt.

Hashtable'i deklaratsioon

Räsitabeli deklaratsioon on näidatud allpool. Räsitabel luuakse räsitabeli andmetüübi abil. Märksõna "uus" kasutatakse räsitabeli objekti loomiseks. Seejärel määratakse objekt muutujale ht.

Hashtable ht = new Hashtable()

Elementide lisamine räsitabelisse

Lisamismeetodit kasutatakse elemendi lisamiseks järjekorda. Avalduse üldine süntaks on toodud allpool

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

Näide 1:

Pidage meeles, et räsitabeli iga element koosneb kahest väärtusest, millest üks on võti ja teine ​​väärtus.

Nüüd vaatame, kuidas see töötab koodi tasemel. Kogu allpool nimetatud kood kirjutatakse meie konsoolirakendusse.

Kood kirjutatakse meie faili Program.cs. Allolevas programmis kirjutame koodi, et näha, kuidas saame ülalnimetatud meetodeid kasutada.

Praegu vaatame oma näites lihtsalt seda, kuidas saame luua räsitabeli, lisada räsitabelile elemente ja neid vastavalt kuvada.

Hashtable C# keeles

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

  1. Esiteks deklareerime räsitabeli muutuja, kasutades andmetüüpi Hashtable, kasutades märksõna "Uus". Määratletava muutuja nimi on "ht".
  2. Seejärel lisame lisamismeetodi abil räsitabelisse elemente. Pidage meeles, et räsitabelisse millegi lisamisel peame lisama nii võtme- kui ka väärtuselemendi.
  3. Räsitabeli elementide kuvamiseks pole otsest võimalust.
    • Räsitabeli kuvamiseks peame esmalt hankima räsitabelist võtmete loendi (001, 002 ja 003).
    • Seda tehakse ICollectioni liidese kaudu. See on spetsiaalne andmetüüp, mida saab kasutada räsitabelite kogude võtmete salvestamiseks. Seejärel määrame räsitabelikogu võtmed muutujale 'keys'.
  4. Järgmisena saame iga võtmeväärtuse jaoks vastava väärtuse räsitabelis, kasutades lauset ht[k].

Kui ülaltoodud kood on õigesti sisestatud ja programm käivitatakse, kuvatakse järgmine väljund.

Väljund:

Hashtable C# keeles

Vaatame veel mõnda räsitabelite jaoks saadaolevat meetodit.

Sisaldab võtit

Seda meetodit kasutatakse selleks, et näha, kas räsitabelis on võti. Allpool on selle avalduse üldine süntaks. Lause tagastab tõene, kui võti on olemas, vastasel juhul tagastab see väärtuse false.

Hashtable.Containskey(key)

Sisaldab väärtust

Seda meetodit kasutatakse selleks, et näha, kas väärtus on räsitabelis olemas. Allpool on selle avalduse üldine süntaks. Väide tagastab väärtuse tõene, kui väärtus on olemas, vastasel juhul tagastab see väärtuse false.

Hashtable.ContainsValue(value)

Näide 2:

Muudame oma koodi Konsooli rakendus et näidata, kuidas saame kasutada meetodeid "Containskey" ja "ContainsValue".

Hashtable C# keeles

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

  1. Esiteks kasutame meetodit ContainsKey, et näha, kas võti on räsitabelis olemas. See meetod tagastab tõene, kui võti on räsitabelis olemas. See meetod peaks tagastama tõene, kuna võti on räsitabelis olemas.
  2. Seejärel kasutame meetodit ContainsValue, et näha, kas väärtus on räsitabelis olemas. See meetod tagastab väärtuse "tõene", kuna väärtus on räsitabelis olemas.

Kui ülaltoodud kood on õigesti sisestatud ja programm käivitatakse, kuvatakse järgmine väljund.

Väljund:

Hashtable C# keeles

Väljundist on selgelt näha, et nii otsitav võti kui ka väärtus on räsitabelis olemas.

Kuidas C# räsitabelis tsüklit teha

Ülaltoodud näited loevad väärtusi läbi Keys kollektsiooni, aga Hashtable'i saab läbida ka puhtamal viisil. Foreach-tsükkel DictionaryEntry kohal annab sulle võtme ja iga elemendi väärtuse korraga, mis on kõige levinum viis Hashtable'i lugemiseks.

Step 1) Loo räsitabel ja lisa sinna kolm võtme-väärtuse paari.

Step 2) Tsükelda räsitabel DictionaryEntry muutujaga ja seejärel loe iga kirje atribuudid Key ja Value.

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

  1. Luuakse räsitabel nimega ht ja lisatakse kolm võtme-väärtuse paari meetodi Add abil.
  2. Foreach-tsükkel määrab igale elemendile sõnastikukirje (DictionaryEntry), mille omadused Key ja Value paljastavad paari kaks poolt.

Programmi käivitamisel prindib see iga võtme väärtuse kõrvale, näiteks 101 – JavaKuna räsitabel ei pea sisestamise järjekorda, võivad paarid ilmuda teises järjekorras, kui need lisati. Ainult võtmete lugemiseks tehke tsükkel üle võtmete kollektsiooni ja ainult väärtuste lugemiseks tehke tsükkel üle väärtuste kollektsiooni.

C# räsitabeli meetodid ja omadused

Hashtable klass pakub väikest meetodite ja omaduste komplekti, mis hõlmab peaaegu kõiki vajalikke ülesandeid, alates paaride lisamisest ja eemaldamisest kuni liikmelisuse kontrollimise ja elementide loendamiseni. Kõige kasulikumad liikmed on loetletud allpool.

Liige KASUTUSALA Kirjeldus
Lisa(võti, väärtus) Meetod Lisab uue võtme ja väärtuse paari; võti peab olema unikaalne.
Eemalda(võti) Meetod Kustutab elemendi, mis vastab määratud võtmele.
Tühjenda () Meetod Eemaldab räsitabelist kõik võtme-väärtuse paarid.
SisaldabKey(võti) Meetod Tagastab väärtuse tõene, kui antud võti on olemas.
SisaldabVäärtust(väärtus) Meetod Tagastab väärtuse tõene, kui antud väärtus on olemas.
Loendama vara Saate salvestatud võtme-väärtuse paaride arvu.
Keys vara Tagastab kõigi võtmete kogumi.
Väärtused vara Tagastab kõigi väärtuste kogumi.

Kuna iga võti on räsitud, leiavad ContainsKey ja indekseerija elemendi peaaegu konstantse aja jooksul, mis teebki Hashtable'i kiirete otsingute jaoks nii kasulikuks.

Erinevus räsitabeli ja sõnaraamatu vahel C#-s

Nii räsitabel kui ka sõnastik salvestavad võtme-väärtuse paare ning kuuluvad mõlemad laiemasse C#-keeleperekonda. kollektsioonidOluline erinevus on tüübiohutus ja see erinevus otsustab, millise poole uues koodis pöörduda.

  • Tüübi ohutus: Hashtable salvestab iga võtme ja väärtuse objektina, samas kui Dictionary on üldine, seega kompilaator kontrollib teie kasutatavaid tüüpe.
  • Nimeruum: Hashtable asub kaustas System.Collections, samas kui Dictionary asub kaustas System.Collections.Generic.
  • Boxing: Hashtable'i kastides on väärtustüübid nagu int, kuid üldine sõnastik salvestab need otse ja väldib seda kulu.
  • Performance: Sõnastik on tavaliselt kiirem, kuna väärtuse lugemisel ei ole vaja objektilt tagasi suunata.
  • Keerme ohutus: Hashtable pakub Syncühe kirjutaja ja paljude lugejatega inimese poolt salvestatud ümbris, samas kui samaaegse koodi puhul valitakse tavaliselt ConcurrentDictionary.

Iga uue projekti puhul on soovitatav valik üldine sõnastik ja mitte-üldine Hashtable esineb peamiselt vanemas koodis.

KKK

Meetod Remove kustutab antud võtmega elemendi ja vähendab Count väärtust ühe võrra. Kui võtit pole olemas, ei juhtu midagi, seega kutsu esmalt meetod ContainsKey, kui pead olema kindel võtme olemasolus.

Ei. Iga võti räsitabelis peab olema unikaalne. Funktsiooni Add kutsumine juba olemasoleva võtmega tekitab ArgumentException'i. Samas saab sama väärtuse salvestada mitme erineva võtme alla ilma veateadeteta.

Hashtable toetab turvaliselt ühte kirjutajat paljude lugejatega. Mitme kirjutamislõime korral tuleks see Hashtable'i abil mähkida.Synckroonitud või eelistage ConcurrentDictionary't saidilt System.Collections.Concurrent, mis tegeleb samaaegsete lugemiste ja kirjutamistega ilma väliste lukkudeta.

Väärtuse otsimine võtme abil võtab keskmiselt peaaegu konstantse O(1) ajaga aega, kuna võtit räsitakse oma ämbri leidmiseks. Tugevad räsi kokkupõrked võivad seda aeglustada, kuid hästi hajutatud võtmete puhul on see haruldane.

Väärtus võib olla null, aga võti mitte. Nullvõtme edastamine funktsioonile Add või indekseerija tekitab ArgumentNullExceptioni. Iga võti peab olema unikaalne ja ei tohiks salvestamise ajal muutuda.

Räsitabel (Hashtable) ei hoia järjekorda, seega ei saa seda kohapeal sorteerida. Kopeeri selle võtmed loendisse või ArrayListi, sorteeri see loend ja seejärel loe väärtused võtme järgi. Sorteeritud loend hoiab oma kirjed automaatselt järjekorras.

Jah. GitHub Copilot kirjutab lühikese kommentaari või meetodi nime põhjal räsitabeli deklaratsioone, lisamiskõnesid ja sõnastikuentry tsükleid. Sageli soovitab see hoopis üldist sõnastikku, kuna see on uue C# koodi jaoks soovitatav kogum.

ML.NET-i treeningandmed liiguvad läbi tüüpitud kogumite ja IDataView torujuhtme, mitte räsitabeli kaudu. Räsipõhised võtme-väärtuse kaardid toetavad aga endiselt funktsioonide otsinguid, sõnavara kodeerimist ja masinõppe mudeli ümber vahemällu salvestamist.

Võta see postitus kokku järgmiselt: