Что такое Dictionary в C#?

«Что такое Dictionary в C#?» — вопрос из категории C# Core, который задают на 47% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Dictionary<TKey, TValue> — это универсальная коллекция пар "ключ-значение", которая обеспечивает очень быстрый поиск (в среднем O(1)) за счет использования хэш-таблицы.

Ключевые характеристики:

  • Уникальность ключей: Каждый ключ в словаре должен быть уникальным. Попытка добавить дубликат вызовет ArgumentException.
  • Производительность: Операции поиска, вставки и удаления выполняются за константное время в среднем случае.
  • Порядок: В классическом Dictionary порядок элементов не гарантирован. Если порядок важен, используйте SortedDictionary<TKey, TValue> или OrderedDictionary.
  • Ключи и null: Ключи ссылочного типа не могут быть null. Значения могут быть null.

Практическое использование:

// Создание и инициализация
var countryCapitals = new Dictionary<string, string>
{
    ["Россия"] = "Москва",
    ["Германия"] = "Берлин"
};

// Безопасное добавление
countryCapitals.TryAdd("Франция", "Париж");

// Безопасное получение значения (предпочтительный способ)
if (countryCapitals.TryGetValue("Россия", out string capital))
{
    Console.WriteLine(capital); // Москва
}

// Перебор элементов
foreach (KeyValuePair<string, string> kvp in countryCapitals)
{
    Console.WriteLine($"{kvp.Key}: {kvp.Value}");
}

Важные нюансы:

  1. Для пользовательских типов, используемых в качестве ключа, обязательно корректно переопределите методы GetHashCode() и Equals(). Несоблюдение этого правила приведет к некорректной работе словаря.
  2. При интенсивных операциях вставки/удаления может происходить рехеширование, что временно снижает производительность. Если размер коллекции известен заранее, укажите его в конструкторе: new Dictionary<int, string>(capacity: 1000).