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

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

Set

Set

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

  • Add — добавление элемента. Если такой элемент уже присутствует, то он не будет добавлен.
  • Remove — удаление элемента из множества.
  • Union — объединение множеств. Создается новое множество, включающее в себя все элементы из множества А и множества В. Если элемент содержится в обоих множествах, он будет добавлен однократно.
  • Difference — разность множеств. Создается новое множество, включающее в себя все элементы множества А, которые не входят в множество В.
  • Intersection — пересечение множеств. Создается новое множество, включающее в себя все элементы входящие одновременно и в множество А, и в множество В.
  • Subset — проверка на подмножество. Чтобы быть подмножеством, все элементы множества А должны содержаться в множестве В. Тогда множество А является подмножеством множества В.

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

Множество

Вызов

Заключение

На платформе .NET все операции над множествами уже оптимально реализованы в рамках LINQ запросов, поэтому реализовывать самостоятельно нет необходимости. Исходный код доступен в репозитории github https://github.com/shwanoff/Set.

%d такие блоггеры, как: