Programmering

Arbejde med Hashtable og ordbog i C #

Microsoft .Net Framework giver fremragende support til at arbejde med samlinger. Samlinger bruges til lagring og hentning af data. Du bruger samlinger i din applikation til at allokere hukommelse dynamisk til at gemme elementer og derefter hente dem ved hjælp af nøgle eller indeks efter behov. Dybest set repræsenterer en samling et sæt objekter, som du kan få adgang til ved at gentage hvert af elementerne i samlingen.

Hashtable

Typerne i navneområdet System.Collections gemmer data som objekter af typen Objekt. Hashtable repræsenterer en datastruktur, der kan gemme objekter som nøgleværdipar. Du kan søge efter en værdi i en forekomst af Hashtable-klasse ved hjælp af den tilsvarende nøgle. Bemærk, at både nøglen og den værdi, der er gemt i en Hashtable-forekomst, er af objekttypen. Bemærk, at nøglen ikke kan være nul. Du kan alligevel have en nulværdi gemt. Følgende kodeliste illustrerer, hvordan du kan gemme og hente nøgle / værdier fra en Hashtable-forekomst.

statisk tomrum Main ()

       {

Hashtable hashTable = ny Hashtable ();

hashTable.Add (1, "Joydip");

hashTable.Add (2, "James");

hashTable.Add (3, "Steve");

Console.WriteLine ("Nøgle / værdiparene er: -");

foreach (int nøgle i hashTable.Keys)

           {

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

           }

Console.Read ();

       }

Du kan også drage fordel af GetEnumerator () -metoden i Hashtable-klassen og derefter tælle samlingen for at hente de nøgle / værdipar, der er gemt i den. Her er et kodestykke, der illustrerer dette.

IDictionaryEnumerator enumerator = hashTable.GetEnumerator ();

while (enumerator.MoveNext ())

{

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

}

Du kan også drage fordel af DictionaryEntry-klassen til at gentage elementerne i en Hashtable. Følgende kodestykke illustrerer, hvordan dette kan gø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 hurtigere at søge efter et element i en Hashtable sammenlignet med andre ikke-generiske samlinger - lad os forstå hvorfor. En post i en Hashtable i spande (hver spand kan indeholde flere poster) ved hjælp af hash-nøgler. Hash-nøglen genereres igen automatisk ved hjælp af en hashingalgoritme. MSDN siger: "Når et element føjes til Hashtable, placeres elementet i en spand baseret på hash-koden på nøglen. Efterfølgende opslag af nøglen bruger hash-koden til nøglen til kun at søge i en bestemt spand, således væsentligt reducere antallet af nøglesammenligninger, der kræves for at finde et element. "

Ordbog

Nogle af de vigtige klasser i System.Collections.Generic namsepace inkluderer: List, Queue, HashSet, LinkedList, Stack, LinkedListNode and Dictionary. Ordbogsklassen i C # repræsenterer en generisk datastruktur, der kan indeholde nøgler og værdier af data. Derfor kan du gemme data af enhver type i en ordbogstilstand.

Bemærk, at mens ICollection-grænsefladen udvider det IEnumerable interface, udvider både IDictionary og IList-grænsefladen ICollection-grænsefladen. Ordbogsklassen er indeholdt i System.Collections.Generic navneområdet. I det væsentlige indeholder en ordbog en generisk samling af nøgle / værdipar. Du kan drage fordel af Add-metoden i ordbogsklassen til at gemme objekter i en ordbogsinstans. En ordbog er hurtigere end en Hashtable, da den eliminerer bokse og un-boks overhead.

Følgende kodestykke viser, hvordan du kan gemme og hente objekter i en ordbogsinstans.

Ordbog ordbog = ny ordbog ();

ordbog.Tilføj (1, "Joydip");

ordbog.Tilføj (2, "James");

ordbog.Tilføj (3, "Steve");

foreach (KeyValuePair kvp i ordbogen)

{

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

}

Den grundlæggende forskel mellem en Hashtable og ordbog er, at mens førstnævnte ikke er skrevet og kræver boksning og ikke-boks overhead, gør sidstnævnte ikke, som det er skrevet. Der er en anden forskel mellem dem. Hvis du bruger en indeksering til at hente en værdi fra en Hashtable-forekomst, og elementet ikke findes, får du en nullværdi. Tværtimod, hvis du forsøger at hente et ikke-eksisterende element fra en ordbogsinstans, kastes en undtagelse. Bemærk, at hverken Hashtable eller ordbog kan garantere bevarelse af rækkefølgen af ​​emnerne i samlingen.

Mens Hashtable er en svagt skrevet datastruktur, er en ordbog en stærkt skrevet. Valget mellem en Hashtable og ordbog afhænger af, om du har brug for en typesikker samling. I de fleste tilfælde er en ordbog et godt valg. For at sige det enkelt er en ordbog en forbedret Hashtable. Jeg bruger ofte ordbog over en Hashtable.

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