C# Hashtable ja esimerkkejä
⚡ Älykäs yhteenveto
C#:n hashtable on System.Collections-nimiavaruuden kokoelma, joka tallentaa tiedot avain-arvo-pareina, joissa jokainen yksilöllinen avain vastaa tiettyä arvoa ja avain tarjoaa nopean haun kyseiseen tallennettuun arvoon.

Mikä on Hashtable C#:ssa?
Hajautustaulukko on erityinen kokoelma, jota käytetään avainarvokohteiden tallentamiseen. Joten sen sijaan, että tallennettaisiin vain yksi arvo, kuten pino, taulukkoluettelo ja jono, hash-taulukko tallentaa 2 arvoa. Nämä 2 arvoa muodostavat tiivistetaulukon elementin.
Alla on esimerkki siitä, miltä hash-taulukon arvot voivat näyttää.
{ "001" , ".Net" }
{ "002" , ".C#" }
{ "003" , "ASP.Net" }
Yllä on 3 avainarvoparia. Kunkin elementin näppäimet ovat 001, 002 ja 003. Kunkin avainarvoparin arvot ovat ". Net", "C#" ja "ASP.Net".
Katsotaanpa tarkemmin Hashtable-kokoelmaan käytettävissä olevia toimintoja.
Hashtablen julistus
Hashtable-ilmoitus näkyy alla. Hashtable luodaan Hashtable-tietotyypin avulla. "Uusi" avainsanaa käytetään luomaan Hashtable-objekti. Objekti liitetään sitten muuttujaan ht.
Hashtable ht = new Hashtable()
Elementtien lisääminen Hashtable-taulukkoon
Lisää-menetelmää käytetään elementin lisäämiseen jono. Lausunnon yleinen syntaksi on annettu alla
HashTable.add("key","value")
Esimerkki 1:
Muista, että hash-taulukon jokainen elementti koostuu kahdesta arvosta, joista toinen on avain ja toinen arvo.
Katsotaan nyt tämän toimivan kooditasolla. Kaikki alla mainittu koodi kirjoitetaan konsolisovellukseemme.
Koodi kirjoitetaan Program.cs-tiedostoomme. Alla olevaan ohjelmaan kirjoitamme koodin nähdäksemme kuinka voimme käyttää yllä mainittuja menetelmiä.
Toistaiseksi esimerkissämme tarkastellaan vain, kuinka voimme luoda hashtable , lisätä elementtejä hashtableille ja näyttää ne vastaavasti.
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 Selitys:-
- Ensin määritetään hashtable-muuttuja käyttämällä Hashtable-tietotyyppiä käyttämällä avainsanaa "Uusi". Määrittämän muuttujan nimi on 'ht'.
- Lisäämme sitten elementtejä hash-taulukkoon Add-menetelmällä. Muista, että meidän on lisättävä sekä avain- että arvoelementti, kun lisäämme jotain hash-taulukkoon.
- Ei ole suoraa tapaa näyttää hash-taulukon elementtejä.
- Jotta tiivistetaulukko voidaan näyttää, meidän on ensin hankittava avainluettelo (001, 002 ja 003) hash-taulukosta.
- Tämä tehdään ICollection-liittymän kautta. Tämä on erityinen tietotyyppi, jota voidaan käyttää hashtable-kokoelmien avainten tallentamiseen. Määritämme sitten hashtable-kokoelman avaimet muuttujalle "avaimet".
- Seuraavaksi jokaiselle avainarvolle saamme siihen liittyvän arvon hash-taulukossa käyttämällä käskyä ht[k].
Jos yllä oleva koodi on syötetty oikein ja ohjelma ajetaan, näyttöön tulee seuraava tulos.
lähtö:
Katsotaanpa joitain muita käytettävissä olevia menetelmiä hash-taulukoissa.
Sisältää avaimen
Tätä menetelmää käytetään tarkistamaan, onko avain läsnä hash-taulukossa. Alla on tämän lausunnon yleinen syntaksi. Lauseke palauttaa tosi, jos avain on olemassa, muuten se palauttaa arvon false.
Hashtable.Containskey(key)
Sisältää Arvon
Tätä menetelmää käytetään tarkistamaan, onko arvo tiivistetaulukossa. Alla on tämän lausunnon yleinen syntaksi. Lauseke palauttaa tosi, jos arvo on olemassa, muuten se palauttaa arvon false.
Hashtable.ContainsValue(value)
Esimerkki 2:
Muutetaan koodi meidän Konsolisovellus esitelläksemme, kuinka voimme käyttää "Containskey"- ja "ContainsValue"-menetelmiä.
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 Selitys:-
- Ensin käytämme ContainsKey-menetelmää nähdäksemme, onko avain läsnä hash-taulukossa. Tämä menetelmä palauttaa tosi, jos avain on läsnä hash-taulukossa. Tämän menetelmän pitäisi palauttaa tosi, koska avain on olemassa hash-taulukossa.
- Käytämme sitten ContainsValue-menetelmää nähdäksemme, onko arvo läsnä hash-taulukossa. Tämä menetelmä palauttaa arvon "true", koska arvo on olemassa hash-taulukossa.
Jos yllä oleva koodi on syötetty oikein ja ohjelma ajetaan, näyttöön tulee seuraava tulos.
lähtö:
Tulosteesta näet selvästi, että sekä avain että haettava arvo ovat läsnä hash-taulukossa.
Kuinka silmukoida C#-hashtablen läpi
Yllä olevat esimerkit lukevat arvoja Keys-kokoelman kautta, mutta Hashtable-taulukon läpikäyminen on siistimpää. Foreach-silmukka DictionaryEntry-taulukon yli antaa sinulle avaimen ja jokaisen elementin arvon yhdessä vaiheessa, mikä on yleisin tapa lukea Hashtable.
Vaihe 1) Luo hashtable ja lisää siihen kolme avain-arvo-paria.
Vaihe 2) Käy Hashtable läpi DictionaryEntry-muuttujalla ja lue sitten kunkin merkinnän Key- ja Value-ominaisuudet.
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 Selitys:-
- Luodaan ht-niminen hashtable ja lisätään kolme avain-arvo-paria Add-metodilla.
- Foreach-silmukka määrittää jokaisen elementin DictionaryEntry-elementtiin, jonka Key- ja Value-ominaisuudet paljastavat parin kaksi puoliskoa.
Kun ohjelma suoritetaan, se tulostaa jokaisen avaimen arvon viereen, kuten 101 – JavaKoska hashtable ei säilytä lisäysjärjestystä, parit saattavat näkyä eri järjestyksessä kuin ne lisättiin. Jos haluat lukea vain avaimet, käy läpi Keys-kokoelma, ja jos haluat lukea vain arvot, käy läpi Values-kokoelma.
C# Hashtable-metodit ja -ominaisuudet
Hashtable-luokka tarjoaa pienen joukon metodeja ja ominaisuuksia, jotka kattavat lähes kaikki tarvitsemasi tehtävät parien lisäämisestä ja poistamisesta jäsenyyden tarkistamiseen ja elementtien laskemiseen. Hyödyllisimmät jäsenet on lueteltu alla.
| Jäsen | Tyyppi | Tuotetiedot |
|---|---|---|
| Lisää(avain, arvo) | Menetelmä | Lisää uuden avain- ja arvoparin; avaimen on oltava yksilöllinen. |
| Poista(avain) | Menetelmä | Poistaa elementin, joka vastaa määritettyä avainta. |
| Asia selvä() | Menetelmä | Poistaa kaikki avain-arvo-parit Hashtable-taulukosta. |
| SisältääKey(avain) | Menetelmä | Palauttaa arvon true, kun annettu avain on läsnä. |
| SisältääArvon(arvo) | Menetelmä | Palauttaa arvon tosi, kun annettu arvo on läsnä. |
| Laskea | Omaisuus | Hakee tallennettujen avain-arvo-parien määrän. |
| Keys | Omaisuus | Palauttaa kaikkien avainten kokoelman. |
| arvot | Omaisuus | Palauttaa kokoelman kaikista arvoista. |
Koska jokainen avain on tiivistetty (hash), ContainsKey ja indeksoija paikantavat elementin lähes vakioajassa, mikä tekee Hashtable-taulukosta niin hyödyllisen nopeisiin hakuihin.
Ero hashtablen ja sanakirjan välillä C#:ssa
Sekä hashtable että sanakirja tallentavat avain-arvo-pareja ja kuuluvat laajempaan C#-kieliperheeseen. kokoelmatTärkeä ero on tyyppiturvallisuus, ja tämä ero ratkaisee, mihin tyyppiin kannattaa pyrkiä uudessa koodissa.
- Tyyppiturvallisuus: Hashtable tallentaa jokaisen avaimen ja arvon objektina, kun taas Dictionary on geneerinen, joten kääntäjä tarkistaa käyttämäsi tyypit.
- nimiavaruus Hashtable sijaitsee System.Collections-tiedostossa, kun taas Dictionary sijaitsee System.Collections.Generic-tiedostossa.
- BoxING: Hashtable-taulukko asettaa arvotyyppejä, kuten int, mutta geneerinen sanakirja tallentaa ne suoraan ja välttää tuon kustannukset.
- Suorituskyky: Sanakirja on yleensä nopeampi, koska se ei tarvitse takaisinkytkentää objektista arvoa luettaessa.
- Langan turvallisuus: Hashtable tarjoaa Synckroonisoitu kääre yhdelle kirjoittajalle, jolla on useita lukijoita, kun taas rinnakkaisessa koodissa valitaan yleensä ConcurrentDictionary.
Uusille projekteille suositeltu valinta on yleinen Dictionary, ja ei-yleinen Hashtable esiintyy pääasiassa vanhemmassa koodissa.




