TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.77K subscribers
Post #170 470
День сто сороковой. #ЗаметкиНаПолях
Коллекции в C#
1. Словарь Dictionary<TKey, TValue>
Словарь - это тип коллекции, который полезен, когда вам нужен быстрый поиск по ключам. Например, у вас есть список клиентов, и в рамках задачи вам нужно быстро найти клиента по его ID (или другому уникальному ключу). В списке поиск элемента линейный, и стоимость этой операции составляет O(n). Однако при использовании словаря поиск выполняется стоимостью O(1), т.е. независимо от того, насколько велик словарь, время поиска остается относительно постоянным.
При хранении или извлечении объекта в словаре необходимо указать ключ. Ключ - это значение, которое однозначно идентифицирует объект и не может быть null. Например, чтобы сохранить объект Customer в словаре, вы можете использовать CustomerID в качестве ключа.
Для создания словаря нужно указать тип ключей и значений. Например, для словаря клиентов:
var dictionary = new Dictionary<int, Customer>();
dictionary.Add(customer.Id, customer);
…
// Получаем клиента с ID 1234
var customer = dictionary[1234];

Наиболее полезные методы и свойства:
// Удаление элемента по ключу 
dictionary.Remove(1);
// Очистка словаря
dictionary.Clear();
// Количество элементов
var count = dictionary.Count;
// Проверка на вхождение ключа
var containsKey = dictionary.ContainsKey(1);
// Проверка на вхождение значения
var containsValue = dictionary.ContainsValue(customer1);
// Итерация по ключам
foreach (var key in dictionary.Keys)
Console.WriteLine(dictionary[key]);
// Итерация по значениям
foreach (var value in dictionary.Values)
Console.WriteLine(value);
// Итерация по парам ключ-значение
foreach (var keyValuePair in dictionary)
{
Console.WriteLine(keyValuePair.Key);
Console.WriteLine(keyValuePair.Value);
}

Почему поиск в словаре так быстр? Словарь хранит объекты в массиве, но в отличие от списка, в котором объекты добавляются в конец массива (или по указанному индексу), индекс в словаре вычисляется с использованием хеш-функции. При сохранении объекта в словаре, вычисляется хеш ключа с помощью функции GetHashCode. Затем хэш корректируется под размер массива, чтобы вычислить индекс. При поиске объекта по ключу, метод GetHashCode снова используется для вычисления хеша и индекса. Поэтому, в отличие от списков, поиск объекта в словаре не требует сканирования каждого объекта и независимо от того, насколько велик словарь, он останется чрезвычайно быстрым.

Источник: https://programmingwithmosh.com/net/csharp-collections/
More from @netdeveloperdiary
  1. Oct 18, 2026День 2818. #ВопросыНаСобеседовании Марк Прайс предложил свой набор из 60 вопросов (как тех…
  2. Oct 17, 2026День 2817. #ЧтоНовенького #VS Прекращаем Сборку После Первой Ошибки Мэдс Кристенсен продол…
  3. Oct 16, 2026День 2816. #Карьера #AI Станет ли ИИ-Кодинг Концом Программирования для Людей? Автор ориги…
  4. Oct 15, 2026Post #3374
  5. Oct 14, 2026Post #3373
  6. Oct 13, 2026День 2813. #ЗаметкиНаПолях #Async Ещё Раз Про Async/Await в C#. Часть 1 Почему существует…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →