TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.75K subscribers
Post #171 435
День сто сорок первый. #ЗаметкиНаПолях
Коллекции в C#
2. HashSet<T>
HashSet представляет набор уникальных элементов, как математическое множество (например, {1, 2, 3}). Набор не может содержать дубликаты, а порядок элементов не имеет значения, т.е. {1, 2, 3} и {3, 2, 1} равны.
HashSet используется, когда вам нужен быстрый поиск в наборе уникальных элементов. Например, при обработке списка заказов для каждого заказа вам нужно быстро проверить, входит ли код поставщика в список корректных кодов.
HashSet, похож на Dictionary, представляет собой коллекцию на основе хеша, поэтому поиск выполняется очень быстро за время O(1). Но, в отличие от словаря, он хранит только значения без ключей. Таким образом, каждый объект должен быть уникальным, и это определяется по GetHashCode. Т.е., если вы собираетесь хранить пользовательские типы в наборе, вам необходимо переопределить методы GetHashCode и Equals в вашем типе.

Создание и использование:
- Инициализация:
var hashSet = new HashSet<int>() { 1, 2, 3 };
- Добавление:
hashSet.Add(4);
- Удаление:
hashSet.Remove(3);
- Очистка:
hashSet.Clear();
- Проверка наличия элемента:
var contains = hashSet.Contains(1);
- Количество элементов:
var count = hashSet.Count;

HashSet предоставляет набор математических операций для работы с множествами. Следующие методы имеют аналоги в LINQ для любых коллекций IEnumerable<T>:
- Пересечение множеств (изменяет hashSet):
hashSet.IntersectWith(another);
- Объединение множеств (изменяет hashSet):
hashSet.UnionWith(another);
- Удаляет все элементы another из hashSet:
hashSet.ExceptWith(another);

Следующие методы НЕ имеют аналогов в LINQ для обычных коллекций:
- Симметричная разница (изменяет hashSet), элементы из hashSet или из another, но не из обоих:
hashSet.SymmetricExceptWith(another);
- Является ли hashSet надмножеством another:
var isSupersetOf = hashSet.IsSupersetOf(another);
- Является ли hashSet строгим надмножеством another:
var isSupersetOf = hashSet.IsProperSupersetOf(another);
- Является ли hashSet подмножеством another:
var isSubsetOf = hashSet.IsSubsetOf(another);
- Является ли hashSet строгим подмножеством another:
var isSubsetOf = hashSet.IsProperSubsetOf(another);
- Содержит ли hashSet те же элементы, что и another:
var equals = hashSet.SetEquals(another);
- Есть ли у hashSet и another одинаковые элементы:
var overlaps = hashSet.Overlaps(another); 

Источник: https://programmingwithmosh.com/net/csharp-collections/
More from @netdeveloperdiary
  1. Oct 6, 2026🦈 Открытое собеседование на Middle C# | 6 октября, 19:00 МСК Приглашаем на открытое собес…
  2. Oct 6, 2026День 2806. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Начало Больши…
  3. Oct 5, 2026День 2805. #ЧтоНовенького #NET11 Аргументы в Выражениях Коллекций в C#15 В C#15 реализован…
  4. Oct 4, 2026День 2804. #ВопросыНаСобеседовании Марк Прайс предложил свой набор из 60 вопросов (как тех…
  5. Oct 3, 2026Post #3360
  6. Oct 3, 2026День 2803. #Оффтоп Чем Заняться, Пока Работают Агенты? У VS Code Есть Ответ Сейчас большую…
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 →