← Все вопросы

Как пользоваться Dictionary в C# и перебрать все пары ключ-значение?

Задан 15 месяцев назад1.4к просмотров2 ответа
7

Перешёл с Python, там были словари dict. В C# вижу Dictionary<TKey, TValue>, но синтаксис непривычный. Как создать словарь, добавить элементы и потом пройтись по всем парам? И правда ли, что Hashtable — это устаревшая версия?

2 ответа

14
✓ Принятый ответ — помог автору

Dictionary<TKey, TValue> — это как раз аналог питоновского dict. Создание и заполнение:

var ages = new Dictionary<string, int>
{
    ["Аня"] = 25,
    ["Борис"] = 30
};
ages["Вера"] = 28;        // добавить/перезаписать
ages.Add("Глеб", 40);     // добавить (бросит исключение, если ключ уже есть)

Перебор всех пар через foreach — каждый элемент это KeyValuePair:

foreach (var pair in ages)
    Console.WriteLine($"{pair.Key} -> {pair.Value}");

// или через деконструкцию (C# 7+):
foreach (var (name, age) in ages)
    Console.WriteLine($"{name} -> {age}");

Безопасное чтение, чтобы не словить KeyNotFoundException:

if (ages.TryGetValue("Аня", out int a))
    Console.WriteLine(a);

if (ages.ContainsKey("Зоя"))
    Console.WriteLine(ages["Зоя"]);

Про Hashtable — да, это старый необобщённый класс из .NET 1.0. Он хранит всё как object, требует приведения типов и медленнее. В новом коде всегда используйте Dictionary<TKey, TValue>.

5

Добавлю про перебор только ключей или только значений — это часто нужно:

foreach (string key in ages.Keys)
    Console.WriteLine(key);

foreach (int value in ages.Values)
    Console.WriteLine(value);

И да, Hashtable забудьте как страшный сон — это наследие до дженериков. Dictionary типобезопасен и быстрее.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект