Словарь Dictionary в C#

Dictionary в C#: словарь «ключ — значение», добавление, поиск, перебор пар и безопасный доступ TryGetValue.

Dictionary<TKey, TValue> хранит пары «ключ — значение» и обеспечивает быстрый поиск по ключу. Ключи уникальны — у каждого ключа только одно значение.

Создание и добавление

using System.Collections.Generic;

var ages = new Dictionary<string, int>();
ages["Аня"]  = 25;
ages["Боря"] = 30;
ages["Вика"] = 22;

Console.WriteLine(ages["Боря"]);  // 30
Console.WriteLine(ages.Count);    // 3

Вывод:

30
3

Можно инициализировать сразу:

var capitals = new Dictionary<string, string>
{
    { "Россия", "Москва" },
    { "Франция", "Париж" },
    { "Япония", "Токио" }
};

Безопасный доступ: TryGetValue

Обращение к несуществующему ключу через [] бросает KeyNotFoundException. Используйте TryGetValue:

if (ages.TryGetValue("Дима", out int age))
    Console.WriteLine($"Возраст: {age}");
else
    Console.WriteLine("Ключ не найден");

// Или ContainsKey перед доступом
if (ages.ContainsKey("Аня"))
    Console.WriteLine(ages["Аня"]);

Вывод:

Ключ не найден
25

Основные методы

Метод / свойство

Действие

dict[key] = val

добавить или обновить

TryGetValue(k, out v)

получить безопасно

ContainsKey(k)

проверить наличие ключа

Remove(k)

удалить пару по ключу

Keys

коллекция всех ключей

Values

коллекция всех значений

Count

количество пар

Перебор пар

var scores = new Dictionary<string, int>
{
    { "Алиса", 95 },
    { "Боб",   80 },
    { "Карл",  88 }
};

foreach (var pair in scores)
    Console.WriteLine($"{pair.Key}: {pair.Value}");

// Или деконструкция (C# 7+)
foreach (var (name, score) in scores)
    Console.WriteLine($"{name} набрал {score} очков");

Вывод:

Алиса: 95
Боб: 80
Карл: 88
Алиса набрал 95 очков
Боб набрал 80 очков
Карл набрал 88 очков

Словарь не гарантирует порядок добавления. Если порядок важен — используйте SortedDictionary<K,V> или List<(K,V)>.

Коротко

  • Dictionary<TKey, TValue> — словарь с быстрым поиском по ключу.
  • Ключи уникальны; присвоение по существующему ключу обновляет значение.
  • Для безопасного чтения используйте TryGetValue, а не [] напрямую.
  • Порядок элементов не гарантирован.
Проверьте себя
1. Что случится при dict["несуществующий_ключ"]?
AВернёт null
BВернёт значение по умолчанию
CБросит KeyNotFoundException
DДобавит ключ с пустым значением
2. Что произойдёт при повторном dict["key"] = value?
AДобавится вторая пара с тем же ключом
BБросит исключение
CСтарое значение заменится новым
DНичего не изменится
3. Как безопасно получить значение из словаря, не зная, есть ли ключ?
Adict[key] в блоке try-catch
Bdict.TryGetValue(key, out var val)
Cdict.Get(key)
Ddict.SafeGet(key)
Поддержать проект