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.