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:

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

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

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

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

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.