Множество (set) — это структура данных, представляющая собой не организованный набор уникальных элементов одного типа. Данная структура очень тесно связано с математическим понятием теории множеств. В наиболее упрощенном понимании, множество — это набор уникальных однотипных данных, рассматриваемых как единое целое. Давайте рассмотрим пример реализации множества и основных операций выполняемых с множествами на языке C#.
На рисунке ниже схематически представлены два множества A и B, а также основные операции: объединение, пересечение, разность.
Давайте подробнее рассмотрим все наиболее часто встречающиеся операции над множествами:
1. Add — добавление элемента. Если такой элемент уже присутствует, то он не будет добавлен.
Remove — удаление элемента из множества.
2. Union — объединение множеств. Создается новое множество, включающее в себя все элементы из множества А и множества В. Если элемент содержится в обоих множествах, он будет добавлен однократно.
3. Difference — разность множеств. Создается новое множество, включающее в себя все элементы множества А, которые не входят в множество В.
4. Intersection — пересечение множеств. Создается новое множество, включающее в себя все элементы входящие одновременно и в множество А, и в множество В.
5.Subset — проверка на подмножество. Чтобы быть подмножеством, все элементы множества А должны содержаться в множестве В. Тогда множество А является подмножеством множества В.
Теперь приступим к реализации данного класса. Будем использовать обобщенный класс и реализовывать интерфейс IEnumerable для произвольного доступа к элементам множества. Для хранения данных воспользуемся списком. Данная реализация является весьма примитивной и не оптимальной, но возможность разобраться в алгоритмах работы основных операций над множествами.
Реализация класса Set.cs
Для начала объявим класс и его свойства
Теперь реализуем операции добавления и удаления элементов множества
Теперь реализуем операцию объединения множеств
Реализуем операцию пересечения множеств
Реализуем операцию разности множеств
Ну и наконец сделаем проверку на подмножество и реализуем интерфейс IEnumerable
Теперь проверим работу нашего класса
В результате получаем следующий вывод на экран
Заключение
На платформе .NET все операции над множествами уже оптимально реализованы в рамках LINQ запросов, поэтому реализовывать самостоятельно нет необходимости. Я не претендую на правильность, оптимальность и красоту реализации. Единственная цель, которую я преследую, поделиться полезной информацией о программировании, которая может кому-то пригодиться.
Источник https://shwan.ru/set/