Как устроен Dictionary в C#?

Dictionary в C# - это обобщенная коллекция, которая представляет собой ассоциативный массив, где каждый элемент представляет пару "ключ-значение". Он является основным инструментом для работы с данными в форме пар "ключ-значение" и обеспечивает быстрый доступ к значениям по ключу.

Dictionary предоставляет эффективное выполнение операций вставки, удаления и поиска элементов. Он реализован на основе хэш-таблицы, что обеспечивает постоянное время выполнения этих операций, независимо от размера словаря. В своей основе Dictionary использует хэширование для определения индекса элемента во внутренней структуре данных.

Основные свойства и методы, доступные в классе Dictionary:
- Count: позволяет получить количество элементов в словаре.
- Keys: возвращает коллекцию ключей, содержащихся в словаре.
- Values: возвращает коллекцию значений, содержащихся в словаре.
- Add(key, value): добавляет новую пару "ключ-значение" в словарь.
- Remove(key): удаляет элемент с указанным ключом из словаря.
- TryGetValue(key, out value): пытается получить значение по указанному ключу, возвращает true, если такой ключ присутствует и значение было успешно получено.
- ContainsKey(key): проверяет наличие элемента с указанным ключом в словаре, возвращает true, если элемент есть, иначе - false.

Для использования Dictionary необходимо подключить пространство имен System.Collections.Generic. Для создания экземпляра словаря задается тип ключа и тип значения в угловых скобках. Например:

Dictionary<string, int> myDictionary = new Dictionary<string, int>();

Далее можно добавлять элементы в словарь используя метод Add():

myDictionary.Add("key1", 10);
myDictionary.Add("key2", 20);

И получать значения по ключу:

int value1 = myDictionary["key1"];

Также можно использовать foreach для перебора элементов в словаре:

foreach (KeyValuePair<string, int> kvp in myDictionary)
{
    Console.WriteLine("Key: {0}, Value: {1}", kvp.Key, kvp.Value);
}

Обратите внимание, что при использовании оператора [] для получения значения по ключу, если такого ключа нет в словаре, будет вызвано исключение KeyNotFoundException. Чтобы избежать этого, можно использовать метод TryGetValue(), который позволяет проверить наличие ключа и получить значение без вызова исключения.

Dictionary в C# является очень мощным и полезным инструментом, который обеспечивает эффективное выполнение операций поиска, вставки и удаления элементов. Он широко используется во множестве задач программирования и разработки приложений.