Programmēšana

Darbs ar hashtable un vārdnīcu C #

Microsoft .Net Framework nodrošina lielisku atbalstu darbam ar kolekcijām. Kolekcijas tiek izmantotas datu glabāšanai un iegūšanai. Lietojumprogrammā izmantojat kolekcijas, lai dinamiski piešķirtu atmiņu elementu glabāšanai un pēc tam tos izgūtu, izmantojot taustiņu vai indeksu, kad vien nepieciešams. Būtībā kolekcija ir objektu kopa, kurai varat piekļūt, atkārtojot katru kolekcijas elementu.

Hashtable

Veidi sistēmā System.Collections nosaukumvietā glabā datus kā Object tipa objektus. Hashtable attēlo datu struktūru, kas objektus var uzglabāt kā galveno vērtību pārus. Izmantojot atbilstošo atslēgu, varat meklēt vērtību Hashtable klases instancē. Ņemiet vērā, ka gan atslēga, gan Hashtable instancē saglabātā vērtība ir objekta tipa. Ņemiet vērā, ka atslēga nevar būt nulle. Jums jebkurā gadījumā var būt saglabāta nulles vērtība. Šis kodu saraksts parāda, kā var saglabāt un izgūt atslēgu / vērtības no Hashtable instances.

static void Main ()

       {

Hashtable hashTable = jauns Hashtable ();

hashTable.Add (1, "Joydip");

hashTable.Add (2, "Džeimss");

hashTable.Add (3, "Stīvs");

Console.WriteLine ("Atslēgu / vērtību pāri ir: -");

foreach (int atslēga hashTable.Keys)

           {

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

           }

Konsole. Lasīt ();

       }

Varat arī izmantot Hashtable klases GetEnumerator () metodes priekšrocības un pēc tam uzskaitīt kolekciju, lai izgūtu tajā saglabātos atslēgu / vērtību pārus. Šeit ir koda fragments, kas to ilustrē.

ID DictionaryEnumerator enumerator = hashTable.GetEnumerator ();

while (uzskaitītājs.MoveNext ())

{

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

}

Varat arī izmantot DictionaryEntry klases priekšrocības, lai atkārtotu hashtable vienumus. Šis koda fragments parāda, kā to var izdarīt.

Hashtable hashTable = jauns Hashtable ();

hashTable.Add (1, "Joydip");

hashTable.Add (2, "Džeimss");

hashTable.Add (3, "Stīvs");

foreach (DictionaryEntry dictionaryEntry hashTable)

{

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

}

Vienuma meklēšana hashtable ir ātrāka, salīdzinot ar citām neģeneriskām kolekcijām - sapratīsim, kāpēc. Ieraksts hashtable grupās (katrā segmentā var būt vairāki ieraksti), izmantojot jaukšanas taustiņus. Maiņas atslēga savukārt tiek ģenerēta automātiski, izmantojot jaukšanas algoritmu. MSDN norāda: "Kad Hashtable tiek pievienots elements, elements tiek ievietots spainī, pamatojoties uz atslēgas jaukšanas kodu. Turpmākajos atslēgas uzmeklējumos tiek izmantots atslēgas jaukšanas kods, lai meklētu tikai vienā noteiktā segmentā, tādējādi būtiski samazinot elementa atrašanai nepieciešamo galveno salīdzinājumu skaitu. "

Vārdnīca

Dažas no System.Collections.Generic namsepace svarīgākajām klasēm ietver: List, Queue, HashSet, LinkedList, Stack, LinkedListNode un Dictionary. Vārdnīcas klase C # apzīmē vispārēju datu struktūru, kas var saturēt datu atslēgas un vērtības. Tādējādi jūs varat glabāt jebkura veida datus vārdnīcas instancē.

Ņemiet vērā, ka, kamēr ICollection interfeiss paplašina IEnumerable interfeisu, gan ID Dictionary, gan IList interfeisi paplašina ICollection interfeisu. Vārdnīcas klase ir iekļauta sistēmā System.Collections.Generic vārdamvieta. Būtībā vārdnīca satur vispārīgu atslēgu / vērtību pāru kolekciju. Varat izmantot klases vārdnīcas pievienošanas metodes priekšrocības, lai objektus glabātu vārdnīcas instancē. Vārdnīca ir ātrāka par hashtable, jo tā novērš boksa un boksera pieskaitāmās izmaksas.

Šis koda fragments parāda, kā jūs varat glabāt un izgūt objektus vārdnīcas instancē.

Vārdnīcas vārdnīca = new Dictionary ();

vārdnīca.Pievienot (1, "Joydip");

vārdnīca.Pievienot (2, "Džeimss");

vārdnīca.Pievienot (3, "Stīvs");

foreach (KeyValuePair kvp vārdnīcā)

{

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

}

Pamata atšķirība starp hashtable un vārdnīcu ir tāda, ka, lai gan pirmais nav ierakstīts un tam ir nepieciešams bokss un bokss virs galvas, otrais nav tāds, kāds tas ir rakstīts. Starp tiem ir vēl viena atšķirība. Ja izmantojat indeksētāju, lai izgūtu vērtību no Hashtable instances un vienums neeksistē, jums tiks atgriezta nulles vērtība. Gluži pretēji, ja mēģināt izgūt neesošu vienumu no vārdnīcas instances, tiks izmests izņēmums. Ņemiet vērā, ka ne hashtable, ne vārdnīca negarantēs kolekcijas priekšmetu secības saglabāšanu.

Kamēr Hashtable ir vāji ierakstīta datu struktūra, vārdnīca ir stingri ierakstīta. Izvēle starp Hashtable un Dictionary ir atkarīga no tā, vai jums nepieciešama tipa droša kolekcija. Vairumā gadījumu vārdnīca ir laba izvēle. Vienkāršāk sakot, vārdnīca ir uzlabota hashtable. Es bieži lietoju vārdnīcu, izmantojot hashtable.

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