День сто сороковой. #ЗаметкиНаПолях
Коллекции в C#
1. Словарь Dictionary<TKey, TValue>
Словарь - это тип коллекции, который полезен, когда вам нужен быстрый поиск по ключам. Например, у вас есть список клиентов, и в рамках задачи вам нужно быстро найти клиента по его ID (или другому уникальному ключу). В списке поиск элемента линейный, и стоимость этой операции составляет O(n). Однако при использовании словаря поиск выполняется стоимостью O(1), т.е. независимо от того, насколько велик словарь, время поиска остается относительно постоянным.
При хранении или извлечении объекта в словаре необходимо указать ключ. Ключ - это значение, которое однозначно идентифицирует объект и не может быть
Для создания словаря нужно указать тип ключей и значений. Например, для словаря клиентов:
Источник: https://programmingwithmosh.com/net/csharp-collections/
Коллекции в 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/