Słownik

Dictionary<TKey, TValue>
Słownik to typ kolekcji, który jest przydatny, gdy potrzebujesz szybkiego wyszukiwania według kluczy. Na przykład wyobraź sobie, że masz listę klientów i w ramach zadania musisz szybko wyszukać klienta według jego identyfikatora (lub innego unikalnego identyfikatora, który nazywamy kluczem).
W przypadku listy wyszukiwanie klienta obejmuje wyszukiwanie liniowe, a koszt tej operacji, może być duży. Jednak w przypadku słownika wyszukiwanie jest bardzo szybkie, co oznacza, że bez względu na to, jak duży jest słownik, czas wyszukiwania pozostaje stosunkowo mały i stały.

Podczas przechowywania lub wyszukiwania obiektu w słowniku musisz podać klucz. Klucz jest wartością, która jednoznacznie identyfikuje obiekt i nie może mieć wartości NULL. Na przykład, aby przechowywać klienta w słowniku, możesz użyć CustomerID jako klucza.

Aby utworzyć słownik, najpierw musisz określić typ kluczy i wartości:

var dictionary = new Dictionary<int, Customer>();

Możesz także dodawać obiekty do słownika podczas inicjalizacji:

var dictionary = new Dictionary<int, Customer>
{
     { customer1.Id, customer1 },
     { customer2.Id, customer2 }
}

Później możesz bardzo szybko wyszukać klientów według ich identyfikatorów:

Zwróć klienta o identyfikatorze 34
varcustomer = dictionary[34];

Możesz usunąć obiekt za pomocą jego klucza lub usunąć wszystkie obiekty za pomocą metody Clear:

// Usuwanie obiektu według jego klucza
dictionary.Remove(1);
 
// Usuwanie wszystkich obiektów
dictionary.Clear()

A oto kilka innych przydatnych metod dostępnych w klasie Dictionary:

var count = dictionary.Count; 
 
var containsKey = dictionary.ContainsKey(5);
 
var containsValue = dictionary.ContainsValue(customer);
 
// Iteruje po kluczach
foreach (var key in dictionary.Keys)
     Console.WriteLine(dictionary[key]);
 
// Iteruje po wartościach
foreach (var value in dictionary.Values)
     Console.WriteLine(value);
 
// Iteruje po słowniku
foreach (var keyValuePair in dictionary)
{
     Console.WriteLine(keyValuePair.Key);
     Console.WriteLine(keyValuePair.Value);
}

Dlaczego więc wyszukiwanie słownika jest tak szybkie?
Słownik wewnętrznie przechowuje obiekty w tablicy, ale w przeciwieństwie do listy, w której obiekty są dodawane na końcu tablicy (lub pod podanym indeksem), w słowniku indeks jest obliczany za pomocą funkcji hash.
Kiedy więc przechowujemy obiekt w słowniku, wywoła on metodę GetHashCode na kluczu obiektu, aby obliczyć hash. Hash jest następnie dostosowywany do rozmiaru tablicy w celu obliczenia indeksu w tablicy do przechowywania obiektu.
Później, kiedy szukamy obiektu po jego kluczu, metoda GetHashCode jest ponownie używana do obliczania wartości hash i indeksu. Jak się dowiedziałeś wcześniej, wyszukiwanie obiektu według indeksu w tablicy jest szybką operacją.
W przeciwieństwie do list, wyszukiwanie obiektu w słowniku nie wymaga skanowania każdego obiektu i bez względu na to, jak duży jest słownik, pozostanie on niezwykle szybki.
Jako programista C# musisz wiedzieć, że słowniki są kolekcjami opartymi na haszowaniu i dlatego wyszukiwania są bardzo szybkie.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *