Словарь 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
Основные методы
Метод / свойство | Действие |
| добавить или обновить |
| получить безопасно |
| проверить наличие ключа |
| удалить пару по ключу |
| коллекция всех ключей |
| коллекция всех значений |
| количество пар |
Перебор пар
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)