Ohjelmointi

Työskentely hashtabelin ja sanakirjan kanssa C #

Microsoft .Net Framework tarjoaa erinomaisen tuen kokoelmien käsittelyyn. Kokoelmia käytetään tietojen tallentamiseen ja hakemiseen. Voit käyttää sovelluksen kokoelmia varaamaan muistia dynaamisesti elementtien tallentamiseen ja noutamaan ne sitten näppäimellä tai hakemistolla tarpeen mukaan. Pohjimmiltaan kokoelma edustaa joukko objekteja, joihin pääset käsiksi iteroimalla kokoelman kaikki elementit.

Hashtable

System.Collections-nimitilan tyypit tallentavat tietoja objektityypin objekteiksi. Hashtable edustaa tietorakennetta, joka voi tallentaa objekteja avainarvopareina. Voit etsiä arvoa Hashtable-luokan esiintymästä vastaavaa avainta käyttämällä. Huomaa, että sekä avain että Hashtable-ilmentymään tallennettu arvo ovat objektityyppiä. Huomaa, että avain ei voi olla nolla. Sinulla voi olla nolla arvo joka tapauksessa. Seuraava koodiluettelo kuvaa, kuinka voit tallentaa ja noutaa avaimen / arvot Hashtable-ilmentymästä.

staattinen void Main ()

       {

Hashtable hashTable = uusi hashtable ();

hashTable.Add (1, "Joydip");

hashTable.Add (2, "James");

hashTable.Add (3, "Steve");

Console.WriteLine ("Avain / arvo-parit ovat: -");

foreach (int-avain hashTable.Keys)

           {

Console.WriteLine ("Avain:" + avain + "Arvo:" + hashTable [avain] .ToString ());

           }

Konsoli.Lue ();

       }

Voit myös hyödyntää Hashtable-luokan GetEnumerator () -menetelmää ja laskea sitten kokoelman hakeaksesi siihen tallennetut avain / arvo-parit. Tässä on koodinpätkä, joka kuvaa tätä.

ID DictionaryEnumerator enumerator = hashTable.GetEnumerator ();

while (luetteloija.MoveNext ())

{

Console.WriteLine ("Key:" + enumerator.Key.ToString () + "Arvo:" + enumerator.Value.ToString ());

}

Voit myös hyödyntää DictionaryEntry-luokkaa iteroidaksesi Hashtable-kohteet. Seuraava koodinpätkä kuvaa, miten tämä voidaan tehdä.

Hashtable hashTable = uusi hashtable ();

hashTable.Add (1, "Joydip");

hashTable.Add (2, "James");

hashTable.Add (3, "Steve");

foreach (DictionaryEntry dictionaryEntry hashTable-taulukossa)

{

Console.WriteLine ("Key:" + dictionaryEntry.Key.ToString () + "Arvo:" + dictionaryEntry.Value.ToString ());

}

Kohteen haku hashtable-sovelluksessa on nopeampaa verrattuna muihin ei-yleisiin kokoelmiin - ymmärretään miksi. Hashtable-tietue ämpäreinä (jokainen ämpäri voi sisältää useita tietueita) hash-avaimilla. Hajautusavain puolestaan ​​luodaan automaattisesti käyttämällä hajautusalgoritmia. MSDN toteaa: "Kun elementti lisätään Hashtable-elementtiin, elementti sijoitetaan ämpäriin avaimen hash-koodin perusteella. Seuraavat avaimen hakutiedot käyttävät avaimen hash-koodia etsimään vain yhdestä tietystä ryhmästä, vähentäen siten olennaisesti elementin löytämiseen tarvittavien keskeisten vertailujen määrää. "

Sanakirja

Joitakin System.Collections.Generic-nimitilan tärkeitä luokkia ovat: List, Queue, HashSet, LinkedList, Stack, LinkedListNode ja Dictionary. Sanakirjan luokka C #: ssä edustaa yleistä tietorakennetta, joka voi sisältää avaimet ja datan arvot. Siksi voit tallentaa minkä tahansa tyyppisiä tietoja Sanakirja-instanssiin.

Huomaa, että vaikka ICollection-rajapinta laajentaa IEnumerable-käyttöliittymää, sekä IDictionary- että IList-rajapinnat laajentavat ICollection-rajapintaa. Sanakirja-luokka sisältyy System.Collections.Generic-nimitilaan. Pohjimmiltaan Sanakirja sisältää yleisen kokoelman avain / arvo-pareja. Voit hyödyntää Sanakirja-luokan Lisää-menetelmää objektien tallentamiseksi Sanakirja-esiintymään. Sanakirja on nopeampi kuin hashtable, koska se eliminoi nyrkkeilyn ja nyrkkeilyn yleiskustannukset.

Seuraava koodinpätkä osoittaa, kuinka voit tallentaa ja hakea objekteja Sanakirja-esiintymässä.

Sanakirja sanakirja = uusi sanakirja ();

sanakirja.Lisää (1, "Joydip");

sanakirja.Lisää (2, "James");

sanakirja.Lisää (3, "Steve");

foreach (KeyValuePair kvp sanakirjassa)

{

Console.WriteLine (kvp.Key.ToString () + "-" + kvp.Value.ToString ());

}

Perusero Hashtable- ja Dictionary-sanojen välillä on, että vaikka ensimmäinen on kirjoittamaton ja vaatii nyrkkeilyä ja nyrkkeilyn yläpuolella, jälkimmäinen ei niin kuin se kirjoitetaan. Niiden välillä on toinen ero. Jos käytät indeksointilaitetta arvon noutamiseen Hashtable-ilmentymästä ja kohdetta ei ole olemassa, sinulle palautettaisiin nolla-arvo. Päinvastoin, jos yrität hakea olematonta kohdetta Sanakirja-esiintymästä, heitetään poikkeus. Huomaa, että Hashtable ja Dictionary eivät takaa kokoelman kohteiden järjestyksen säilyttämistä.

Vaikka Hashtable on heikosti kirjoitettu tietorakenne, Sanakirja on vahvasti kirjoitettu. Hashtable- ja Dictionary-sanojen valinta riippuu siitä, tarvitsetko tyyppiturvallisen kokoelman. Useimmissa tapauksissa sanakirja on hyvä valinta. Yksinkertaisesti sanottuna sanakirja on parannettu hashtable. Käytän usein Sanakirjaa Hashtable-sovelluksessa.