Programavimas

Darbas su hashtable ir žodynu C #

„Microsoft .Net Framework“ puikiai palaiko darbą su kolekcijomis. Kolekcijos naudojamos duomenims saugoti ir gauti. Programoje naudojate kolekcijas, kad dinamiškai paskirstytumėte atmintį elementams saugoti, o tada prireikus nuskaitykite juos naudodami raktą arba rodyklę. Iš esmės kolekcija reiškia objektų rinkinį, prie kurio galite pasiekti kartodami kiekvieną kolekcijos elementą.

„Hashtable“

„System.Collections“ vardų srities tipai saugo duomenis kaip „Object“ tipo objektus. „Hashtable“ reiškia duomenų struktūrą, kurioje objektai gali būti saugomi kaip pagrindinių reikšmių poros. Galite ieškoti vertės „Hashtable“ klasės egzemplioriuje naudodami atitinkamą raktą. Atminkite, kad raktas ir vertė, saugoma „Hashtable“ egzemplioriuje, yra objekto tipo. Atminkite, kad raktas negali būti nulinis. Vis tiek galite turėti nulinę vertę. Šis kodų sąrašas parodo, kaip galite išsaugoti ir gauti raktą / reikšmes iš „Hashtable“ egzemplioriaus.

statinis negaliojantis Pagrindinis ()

       {

„Hashtable hashTable“ = nauja „Hashtable“ ();

hashTable.Add (1, "Joydip");

hashTable.Add (2, „James“);

hashTable.Add (3, "Steve");

Console.WriteLine ("Raktų / reikšmių poros yra: -");

foreach (int raktas hashTable.Keys)

           {

Console.WriteLine ("Raktas:" + raktas + "Reikšmė:" + hashTable [raktas] .ToString ());

           }

Pultas.Skaitykite ();

       }

Taip pat galite pasinaudoti „Hashtable“ klasės „GetEnumerator“ () metodu ir tada išvardyti kolekciją, kad gautumėte joje saugomas raktų / reikšmių poras. Tai iliustruoja kodo fragmentas.

IDictionaryEnumerator enumerator = hashTable.GetEnumerator ();

while (surašytojas.MoveNext ())

{

Console.WriteLine ("Key:" + enumerator.Key.ToString () + "Reikšmė:" + enumerator.Value.ToString ());

}

Taip pat galite pasinaudoti „DictionaryEntry“ klasės pranašumais, norėdami pakartoti „Hashtable“ elementus. Šis kodo fragmentas parodo, kaip tai galima padaryti.

„Hashtable hashTable“ = nauja „Hashtable“ ();

hashTable.Add (1, "Joydip");

hashTable.Add (2, „James“);

hashTable.Add (3, "Steve");

foreach (DictionaryEntry dictionaryEntry hashTable)

{

Console.WriteLine ("Key:" + dictionaryEntry.Key.ToString () + "Reikšmė:" + dictionaryEntry.Value.ToString ());

}

„Hashtable“ elemento paieška yra greitesnė, palyginti su kitomis ne generinėmis kolekcijomis - supraskime, kodėl. „Hashtable“ įrašas grupėse (kiekviename segmente gali būti keli įrašai) naudojant maišos raktus. Maišos raktas savo ruožtu generuojamas automatiškai naudojant maišos algoritmą. MSDN teigia: "Kai elementas pridedamas prie" Hashtable ", elementas dedamas į grupę, remiantis rakto maišos kodu. Vėlesni raktų ieškojimai naudoja rakto maišos kodą ieškodami tik viename konkrečiame segmente. taip iš esmės sumažinant pagrindinių palyginimų, reikalingų elementui rasti, skaičių. "

Žodynas

Kai kurios svarbios „System.Collections“. „Namsepace“ klasės apima: sąrašą, eilę, „HashSet“, „LinkedList“, „Stack“, „LinkedListNode“ ir žodyną. Žodyno klasė C # žymi bendrą duomenų struktūrą, kurioje gali būti raktai ir duomenų reikšmės. Taigi bet kokio tipo duomenis galite laikyti „Dictionary“ egzemplioriuje.

Atkreipkite dėmesį, kad nors „ICollection“ sąsaja išplečia „IEnumerable“ sąsają, tiek „IDictionary“, tiek „IList“ sąsajos praplečia „ICollection“ sąsają. Žodyno klasė yra sistemoje. Kolekcijos. Bendroji vardų sritis. Iš esmės Žodyne yra bendras raktų / reikšmių porų rinkinys. Galite pasinaudoti žodyno klasės metodo Pridėti pranašumais, jei norite saugoti objektus žodyno egzemplioriuje. Žodynas yra greitesnis nei „Hashtable“, nes jis pašalina bokso ir neišpakavimo pridėtines išlaidas.

Šis kodo fragmentas rodo, kaip galite saugoti ir gauti objektus žodyno egzemplioriuje.

Žodyno žodynas = naujas žodynas ();

žodynas.Pridėti (1, "Joydip");

žodynas.Pridėti (2, "James");

žodynas.Pridėti (3, "Steve");

foreach („KeyValuePair kvp“ žodyne)

{

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

}

Pagrindinis skirtumas tarp „Hashtable“ ir „Dictionary“ yra tas, kad nors pirmasis yra nerašytas ir jam reikalingas boksas ir boksas virš galvos, antrasis - ne taip, kaip yra rašomas. Tarp jų yra dar vienas skirtumas. Jei naudosite indeksavimo priemonę, norėdami gauti vertę iš „Hashtable“ egzemplioriaus ir elemento nėra, jums bus grąžinta nulinė vertė. Priešingai, jei bandysite iš „Dictionary“ egzemplioriaus gauti neegzistuojantį elementą, bus išimtis. Atkreipkite dėmesį, kad nei „Hashtable“, nei „Dictionary“ negarantuos kolekcijos elementų tvarkos išsaugojimo.

Nors „Hashtable“ yra silpnai surinkta duomenų struktūra, „Dictionary“ yra labai tipiškas. Pasirinkimas tarp „Hashtable“ ir „Dictionary“ priklauso nuo to, ar jums reikia saugios tipo kolekcijos. Daugeliu atvejų žodynas yra geras pasirinkimas. Paprasčiau tariant, Žodynas yra patobulintas „Hashtable“. Aš dažnai naudoju žodyną, naudodamas „Hashtable“.

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