Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
⊗csOpOeHS 111 of 163 menu
◀ ▶

Объекты в HashSet и Dictionary в C#

HashSet<T> хранит уникальные элементы по правилам сравнения и хеш-кода. Dictionary<TKey, TValue> ищет ключ тем же способом.

Если у типа осталось ссылочное сравнение по умолчанию, в набор попадут две разные ссылки с одинаковыми полями. У Tag равенство уже настроено по полю Code. Положим два равных тега в HashSet:

var set = new HashSet<Tag>(); set.Add(new Tag { Code = 3 }); set.Add(new Tag { Code = 3 }); Console.WriteLine(set.Count); class Tag { public int Code; public override bool Equals(object? obj) { if (obj is not Tag other) { return false; } return Code == other.Code; } public override int GetHashCode() { return Code.GetHashCode(); } }

В словаре ключ того же типа ведет себя аналогично. Создадим карту с одним ключом и прочитаем значение по другому ключу с тем же кодом:

var map = new Dictionary<Tag, string>(); var key = new Tag { Code = 5 }; map[key] = "alpha"; var lookup = new Tag { Code = 5 }; Console.WriteLine(map[lookup]);

Сделайте класс Sku с полем Code и смысловым равенством по этому полю. Добавьте в набор уникальных значений два объекта с кодом 10 и выведите, сколько элементов там осталось.

Создайте словарь, где ключ - Sku, а значение - количество. Положите товар с кодом 10 и количеством 4. Прочитайте количество по другому ключу с тем же кодом и выведите число.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить