Programiranje

Delo s Hashtable in slovarjem v jeziku C #

Microsoft .Net Framework nudi odlično podporo za delo z zbirkami. Zbirke se uporabljajo za shranjevanje in iskanje podatkov. Zbirke v svoji aplikaciji uporabljate za dinamično dodeljevanje pomnilnika za shranjevanje elementov in jih nato po potrebi uporabite s ključem ali indeksom. V osnovi zbirka predstavlja nabor predmetov, do katerih lahko dostopate s ponovitvijo vsakega od elementov zbirke.

Hashtable

Tipi v imenskem prostoru System.Collections shranjujejo podatke kot predmete tipa Object. Hashtable predstavlja podatkovno strukturo, ki lahko predmete shrani kot pare ključnih vrednosti. Vrednost lahko poiščete v primerku razreda Hashtable z ustreznim ključem. Upoštevajte, da sta ključ in vrednost, ki sta shranjeni v primerku Hashtable, vrste objekta. Upoštevajte, da ključ ne sme biti nič. Vseeno lahko shranite ničelno vrednost. Naslednji seznam kod ponazarja, kako lahko shranite in pridobite ključe / vrednosti iz primerka Hashtable.

statična praznina Main ()

       {

Hashtable hashTable = nova Hashtable ();

hashTable.Add (1, "Joydip");

hashTable.Add (2, "James");

hashTable.Add (3, "Steve");

Console.WriteLine ("Pari ključ / vrednost so: -");

foreach (int ključ v hashTable.Keys)

           {

Console.WriteLine ("Key:" + key + "Value:" + hashTable [key] .ToString ());

           }

Console.Read ();

       }

Izkoristite lahko tudi metodo GetEnumerator () razreda Hashtable in nato naštejete zbirko, da pridobite v njej shranjene pare ključ / vrednost. Tu je prikazan delček kode, ki to ponazarja.

IDictionaryEnumerator enumerator = hashTable.GetEnumerator ();

while (enumerator.MoveNext ())

{

Console.WriteLine ("Ključ:" + enumerator.Key.ToString () + "Vrednost:" + enumerator.Value.ToString ());

}

Razred DictionaryEntry lahko uporabite tudi za ponovitev elementov v tabeli Hashtable. Naslednji delček kode prikazuje, kako je to mogoče storiti.

Hashtable hashTable = nova Hashtable ();

hashTable.Add (1, "Joydip");

hashTable.Add (2, "James");

hashTable.Add (3, "Steve");

foreach (DictionaryEntry dictionaryEntry v hashTable)

{

Console.WriteLine ("Ključ:" + dictionaryEntry.Key.ToString () + "Vrednost:" + dictionaryEntry.Value.ToString ());

}

Iskanje elementa v tabeli Hashtable je hitrejše v primerjavi z drugimi generičnimi zbirkami - razumimo, zakaj. Zapis v tabeli Hashtable v vedrih (vsak segment lahko vsebuje več zapisov) z uporabo zgoščevalnih tipk. Ključ zgoščevanja se nato samodejno generira z uporabo algoritma zgoščevanja. MSDN navaja: "Ko je element dodan v tabelo razpršitve, se element postavi v vedro na podlagi zgoščevalne kode ključa. Kasnejša iskanja ključa uporabljajo zgoščeno kodo ključa za iskanje samo v določenem vedru s čimer se znatno zmanjša število ključnih primerjav, potrebnih za iskanje elementa. "

Slovar

Nekateri pomembni razredi v System.Collections.Generic namsepace vključujejo: List, Queue, HashSet, LinkedList, Stack, LinkedListNode in Dictionary. Razred Dictionary v C # predstavlja generično podatkovno strukturo, ki lahko vsebuje ključe in vrednosti podatkov. Tako lahko v primerek slovarja shranite podatke katere koli vrste.

Upoštevajte, da medtem ko vmesnik ICollection razširja vmesnik IEnumerable, vmesnika IDictionary in IList razširjata vmesnik ICollection. Razred Dictionary je v imenskem prostoru System.Collections.Generic. V bistvu slovar vsebuje generično zbirko parov ključ / vrednost. Za shranjevanje predmetov v primerku Slovar lahko uporabite metodo Dodaj razreda Slovar. Slovar je hitrejši od tabele Hashtable, saj odpravlja režijske stroške za boks in odstranjevanje boksa.

Naslednji delček kode prikazuje, kako lahko shranjujete in pridobivate predmete v primerku slovarja.

Slovar slovar = nov slovar ();

slovar.Dodaj (1, "Joydip");

slovar.Dodaj (2, "James");

slovar.Dodaj (3, "Steve");

foreach (KeyValuePair kvp v slovarju)

{

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

}

Osnovna razlika med Hashtable in Dictionary je v tem, da medtem ko prvi ni vtipkan in zahteva boks in razveljavitev, drugi pa ne, kot je vtipkan. Med njima je še ena razlika. Če z indeksatorjem pridobite vrednost iz primerka Hashtable in element ne obstaja, vam bo vrnjena ničelna vrednost. Nasprotno, če poskušate iz primerka Slovarja pridobiti neobstoječi element, bo vržena izjema. Upoštevajte, da niti Hashtable niti slovar ne bi zagotovili ohranjanja vrstnega reda predmetov v zbirki.

Medtem ko je Hashtable šibko tipizirana podatkovna struktura, je slovar močno tipiziran. Izbira med Hashtable in Dictionary je odvisna od tega, ali potrebujete varno zbirko vrst. V večini primerov je slovar dobra izbira. Poenostavljeno povedano, slovar je izboljšana Hashtable. Pogosto uporabljam slovar preko Hashtable-a.

$config[zx-auto] not found$config[zx-overlay] not found