Programmering

Arbeide med Hashtable og ordbok i C #

Microsoft .Net Framework gir utmerket støtte for arbeid med samlinger. Samlinger brukes til lagring og henting av data. Du bruker samlinger i applikasjonen din for å tildele minne dynamisk til å lagre elementer og deretter hente dem ved hjelp av nøkkel eller indeks etter behov. I utgangspunktet representerer en samling et sett med objekter som du kan få tilgang til ved å gjenta hvert av elementene i samlingen.

Hashtable

Typene i navneområdet for System.Collections lagrer data som objekter av typen Objekt. Hashtable representerer en datastruktur som kan lagre objekter som nøkkelverdipar. Du kan søke etter en verdi i en forekomst av Hashtable-klassen ved hjelp av den tilsvarende tasten. Merk at både nøkkelen og verdien som er lagret i en Hashtable-forekomst, er av objekttypen. Merk at nøkkelen ikke kan være null. Du kan uansett ha en nullverdi. Følgende kodeliste illustrerer hvordan du kan lagre og hente nøkkel / verdier fra en Hashtable-forekomst.

statisk tomrom Main ()

       {

Hashtable hashTable = ny Hashtable ();

hashTable.Add (1, "Joydip");

hashTable.Add (2, "James");

hashTable.Add (3, "Steve");

Console.WriteLine ("Nøkkel / verdiparene er: -");

foreach (int nøkkel i hashTable.Keys)

           {

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

           }

Console.Read ();

       }

Du kan også dra nytte av GetEnumerator () -metoden i Hashtable-klassen og deretter telle opp samlingen for å hente nøkkel- / verdiparene som er lagret i den. Her er et kodebit som illustrerer dette.

IDictionaryEnumerator enumerator = hashTable.GetEnumerator ();

while (enumerator.MoveNext ())

{

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

}

Du kan også dra nytte av klassen DictionaryEntry for å gjenta elementene i en Hashtable. Følgende kodebit illustrerer hvordan dette kan gjøres.

Hashtable hashTable = ny Hashtable ();

hashTable.Add (1, "Joydip");

hashTable.Add (2, "James");

hashTable.Add (3, "Steve");

foreach (DictionaryEntry dictionaryEntry in hashTable)

{

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

}

Det er raskere å søke etter et element i en Hashtable sammenlignet med andre ikke-generiske samlinger - la oss forstå hvorfor. En post i en Hashtable i bøtter (hver bøtte kan inneholde flere poster) ved hjelp av hash-nøkler. Hash-nøkkelen genereres i sin tur automatisk ved hjelp av en hashingalgoritme. MSDN sier: "Når et element legges til i Hashtable, blir elementet plassert i en bøtte basert på hash-koden til nøkkelen. Etterfølgende oppslag av nøkkelen bruker hash-koden til nøkkelen til å søke i bare en bestemt bøtte, dermed vesentlig redusert antall nøkkelsammenligninger som kreves for å finne et element. "

Ordbok

Noen av de viktige klassene i System.Collections.Generic namsepace inkluderer: List, Queue, HashSet, LinkedList, Stack, LinkedListNode and Dictionary. Ordboksklassen i C # representerer en generisk datastruktur som kan inneholde nøkler og verdier av data. Derfor kan du lagre data av hvilken som helst type i en ordbokforekomst.

Merk at mens ICollection-grensesnittet utvider IEnumerable-grensesnittet, utvider både IDictionary og IList-grensesnittet ICollection-grensesnittet. Ordboksklassen er inneholdt i System.Collections.Generic navneområdet. I hovedsak inneholder en ordbok en generell samling av nøkkel / verdipar. Du kan dra nytte av Legg til-metoden i ordboksklassen for å lagre objekter i en ordbokforekomst. En ordbok er raskere enn en Hashtable, da den eliminerer boksing og un-boksing overhead.

Følgende kodebit viser hvordan du kan lagre og hente gjenstander i en ordbokforekomst.

Ordbok ordbok = ny ordbok ();

ordbok. Legg til (1, "Joydip");

ordbok. Legg til (2, "James");

ordbok. Legg til (3, "Steve");

foreach (KeyValuePair kvp i ordboken)

{

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

}

Den grunnleggende forskjellen mellom en Hashtable og Dictionary er at mens førstnevnte ikke er skrevet og krever boksing og un-boksing overhead, gjør sistnevnte ikke slik det er skrevet. Det er en annen forskjell mellom dem. Hvis du bruker en indekserer for å hente en verdi fra en Hashtable-forekomst og elementet ikke eksisterer, vil du få en nullverdi. Tvert imot, hvis du prøver å hente et ikke-eksisterende element fra en ordbokforekomst, vil et unntak bli kastet. Vær oppmerksom på at verken Hashtable eller Dictionary garanterer å bevare rekkefølgen på elementene i samlingen.

Mens Hashtable er en svakt skrevet datastruktur, er en Dictionary en sterkt skrevet. Valget mellom en Hashtable og Dictionary avhenger av om du trenger en typesikker samling. I de fleste tilfeller er en ordbok et godt valg. For å si det enkelt, er en ordbok en forbedret Hashtable. Jeg bruker ofte Dictionary over en Hashtable.

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