Programování

Práce s Hashtable a slovníkem v C #

Microsoft .Net Framework poskytuje vynikající podporu pro práci s kolekcemi. Kolekce se používají k ukládání a načítání dat. Pomocí kolekcí v aplikaci dynamicky přidělíte paměť k uložení prvků a poté je podle potřeby načtete pomocí klíče nebo indexu. Kolekce v zásadě představuje sadu objektů, ke kterým máte přístup iterací každého z prvků kolekce.

Hashtable

Typy v oboru názvů System.Collections ukládají data jako objekty typu Object. Hashtable představuje datovou strukturu, která může ukládat objekty jako páry klíč-hodnota. Hodnotu můžete vyhledat v instanci třídy Hashtable pomocí odpovídajícího klíče. Všimněte si, že klíč i hodnota uložená v instanci Hashtable jsou typu objektu. Klíč nesmí mít hodnotu null. Každopádně můžete mít uloženou hodnotu null. Následující výpis kódu ukazuje, jak můžete ukládat a načítat klíče / hodnoty z instance Hashtable.

static void Main ()

       {

Hashtable hashTable = new Hashtable ();

hashTable.Add (1, "Joydip");

hashTable.Add (2, "James");

hashTable.Add (3, "Steve");

Console.WriteLine ("Páry klíč / hodnota jsou: -");

foreach (int klíč v hashTable.Keys)

           {

Console.WriteLine ("Klíč:" + klíč + "Hodnota:" + hashTable [klíč] .ToString ());

           }

Console.Read ();

       }

Můžete také využít metodu GetEnumerator () třídy Hashtable a poté vytvořit výčet kolekce pro načtení párů klíč / hodnota uložených v ní. Tady je fragment kódu, který to ilustruje.

IDictionaryEnumerator enumerator = hashTable.GetEnumerator ();

while (enumerator.MoveNext ())

{

Console.WriteLine ("Klíč:" + enumerator.Key.ToString () + "Hodnota:" + enumerator.Value.ToString ());

}

Můžete také využít třídu DictionaryEntry k iteraci položek v Hashtable. Následující fragment kódu ukazuje, jak toho lze dosáhnout.

Hashtable hashTable = new Hashtable ();

hashTable.Add (1, "Joydip");

hashTable.Add (2, "James");

hashTable.Add (3, "Steve");

foreach (DictionaryEntry dictionaryEntry v hashTable)

{

Console.WriteLine ("Klíč:" + dictionaryEntry.Key.ToString () + "Hodnota:" + dictionaryEntry.Value.ToString ());

}

Hledání položky v Hashtable je ve srovnání s jinými negenerickými sbírkami rychlejší - pochopme proč. Záznam v Hashtable v segmentech (každý segment může obsahovat více záznamů) pomocí hash klíčů. Klíč hash je zase generován automaticky pomocí hashovacího algoritmu. MSDN uvádí: "Když je prvek přidán do Hashtable, je prvek umístěn do kbelíku na základě hash kódu klíče. Při následném vyhledávání klíče je použit hash kód klíče k vyhledání pouze v jednom konkrétním segmentu, čímž se podstatně sníží počet klíčových srovnání nutných k nalezení prvku. “

Slovník

Mezi důležité třídy v System.Collections.Generic oboru názvů patří: List, Queue, HashSet, LinkedList, Stack, LinkedListNode and Dictionary. Třída Dictionary v C # představuje obecnou datovou strukturu, která může obsahovat klíče a hodnoty dat. Proto můžete v instanci slovníku ukládat data jakéhokoli typu.

Všimněte si, že zatímco ICollection rozhraní rozšiřuje IEnumerable rozhraní, IDictionary i IList rozhraní rozšiřují ICollection rozhraní. Třída Dictionary je obsažena uvnitř oboru názvů System.Collections.Generic. Slovník v podstatě obsahuje obecnou sbírku párů klíč / hodnota. Můžete použít metodu Add třídy Dictionary k ukládání objektů v instanci Dictionary. Slovník je rychlejší než Hashtable, protože eliminuje režijní náklady spojené s boxováním a rozbalováním.

Následující fragment kódu ukazuje, jak můžete ukládat a načítat objekty uvnitř instance Dictionary.

Slovník slovníku = nový slovník ();

dictionary.Add (1, "Joydip");

dictionary.Add (2, "James");

dictionary.Add (3, "Steve");

foreach (KeyValuePair kvp ve slovníku)

{

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

}

Základní rozdíl mezi Hashtable a Dictionary spočívá v tom, že zatímco první je un-typed a vyžaduje box a un-boxing režii, druhý není tak, jak je napsán. Existuje mezi nimi další rozdíl. Pokud použijete indexer k načtení hodnoty z instance Hashtable a položka neexistuje, bude vám vrácena hodnota null. Naopak, pokud se pokusíte načíst neexistující položku z instance Dictionary, bude vyvolána výjimka. Všimněte si, že ani Hashtable, ani Dictionary by nezaručily zachování pořadí položek ve sbírce.

Zatímco Hashtable je slabě napsaná datová struktura, slovník je silně napsaná. Volba mezi Hashtable a Dictionary závisí na tom, zda potřebujete kolekci bezpečného typu. Ve většině případů je slovník dobrou volbou. Jednoduše řečeno, Slovník je vylepšená Hashtable. Slovník často používám přes Hashtable.

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