4

Множество (Set) на языке C#

Множество (Set) на языке C# Множество, Set, Programming, Программирование, Структуры Данных, Data Structure, Длиннопост

Множество (set) — это структура данных, представляющая собой не организованный набор уникальных элементов одного типа. Данная структура очень тесно связано с математическим понятием теории множеств. В наиболее упрощенном понимании, множество — это набор уникальных однотипных данных, рассматриваемых как единое целое. Давайте рассмотрим пример реализации множества и основных операций выполняемых с множествами на языке C#.


На рисунке ниже схематически представлены два множества A и B, а также основные операции: объединение, пересечение, разность.

Множество (Set) на языке C# Множество, Set, Programming, Программирование, Структуры Данных, Data Structure, Длиннопост

Давайте подробнее рассмотрим все наиболее часто встречающиеся операции над множествами:

1. Add — добавление элемента. Если такой элемент уже присутствует, то он не будет добавлен.

Remove — удаление элемента из множества.

2. Union — объединение множеств. Создается новое множество, включающее в себя все элементы из множества А и множества В. Если элемент содержится в обоих множествах, он будет добавлен однократно.

3. Difference — разность множеств. Создается новое множество, включающее в себя все элементы множества А, которые не входят в множество В.

4. Intersection — пересечение множеств. Создается новое множество, включающее в себя все элементы входящие одновременно и в множество А, и в множество В.

5.Subset — проверка на подмножество. Чтобы быть подмножеством, все элементы множества А должны содержаться в множестве В. Тогда множество А является подмножеством множества В.


Теперь приступим к реализации данного класса. Будем использовать обобщенный класс и реализовывать интерфейс IEnumerable для произвольного доступа к элементам множества. Для хранения данных воспользуемся списком. Данная реализация является весьма примитивной и не оптимальной, но возможность разобраться в алгоритмах работы основных операций над множествами.


Реализация класса Set.cs

Для начала объявим класс и его свойства

Множество (Set) на языке C# Множество, Set, Programming, Программирование, Структуры Данных, Data Structure, Длиннопост

Теперь реализуем операции добавления и удаления элементов множества

Множество (Set) на языке C# Множество, Set, Programming, Программирование, Структуры Данных, Data Structure, Длиннопост

Теперь реализуем операцию объединения множеств

Множество (Set) на языке C# Множество, Set, Programming, Программирование, Структуры Данных, Data Structure, Длиннопост

Реализуем операцию пересечения множеств

Множество (Set) на языке C# Множество, Set, Programming, Программирование, Структуры Данных, Data Structure, Длиннопост

Реализуем операцию разности множеств

Множество (Set) на языке C# Множество, Set, Programming, Программирование, Структуры Данных, Data Structure, Длиннопост

Ну и наконец сделаем проверку на подмножество и реализуем интерфейс IEnumerable

Множество (Set) на языке C# Множество, Set, Programming, Программирование, Структуры Данных, Data Structure, Длиннопост

Теперь проверим работу нашего класса

Множество (Set) на языке C# Множество, Set, Programming, Программирование, Структуры Данных, Data Structure, Длиннопост
Множество (Set) на языке C# Множество, Set, Programming, Программирование, Структуры Данных, Data Structure, Длиннопост

В результате получаем следующий вывод на экран

Множество (Set) на языке C# Множество, Set, Programming, Программирование, Структуры Данных, Data Structure, Длиннопост

Заключение

На платформе .NET все операции над множествами уже оптимально реализованы в рамках LINQ запросов, поэтому реализовывать самостоятельно нет необходимости. Я не претендую на правильность, оптимальность и красоту реализации. Единственная цель, которую я преследую, поделиться полезной информацией о программировании, которая может кому-то пригодиться.


Источник https://shwan.ru/set/