Множества

Множество set of T хранит только различные элементы. Оно удобно для проверки принадлежности, удаления повторов и выполнения операций над множествами: объединения, пересечения, разности, проверки вложения и равенства.

Создание множества

Функция SetOf создаёт множество из перечисленных элементов. Повторяющиеся элементы удаляются.

Println(s) выводит множество в фигурных скобках, а метод s.Println — элементы через пробел.

begin
  var s := SetOf(3,1,4,2,3);

  Println(s);
  s.Println;
end.

Результат:

{3,1,4,2}
3 1 4 2

Количество элементов

Свойство Count возвращает количество элементов множества.

begin
  var s := SetOf(2,3,5,7);

  Print(s.Count);
end.

Результат:

4

Пустое множество

Пустое множество можно создать с помощью универсального инициализатора [], явно указав тип множества.

begin
  var s: set of integer := [];

  Print(s);
end.

Очистка множества

Метод Clear удаляет все элементы множества.

begin
  var s := SetOf(1,2,3,4);

  s.Clear;

  Println(s.Count);
end.

Результат:

0

Присваивание множеств

При присваивании множество копируется по значению. Изменение одной переменной не изменяет другую.

begin
  var s1 := SetOf(1,2,3);
  var s2 := s1;

  s2.Add(4);

  Println(s1);
  Println(s2);
end.

Результат:

{1,2,3}
{1,2,3,4}

Принадлежность множеству

Операция in проверяет, принадлежит ли элемент множеству.

begin
  var s := SetOf(2,3,5,7);

  Println(5 in s);
  Println(6 in s);
end.

Результат:

True
False

Добавление и удаление элементов

Метод Add добавляет элемент в множество, а Remove удаляет элемент.

Если добавить уже существующий элемент или удалить отсутствующий, множество не изменится.

begin
  var s := SetOf(1,2,3);

  s.Add(7); 
  s.Add(1); 
  s.Remove(2);
  s.Remove(8);

  s.Print;
end.

Результат:

1 3 7

Перебор множества

Цикл foreach используется для последовательного перебора всех элементов множества.

begin
  var s := SetOf(2,3,5,7);

  foreach var x in s do
    Print(x);
end.

Объединение множеств

Операция + создаёт множество, содержащее элементы обоих множеств.

begin
  var a := SetOf(1,2,3);
  var b := SetOf(3,4,5);

  Print(a + b);
end.

Результат:

{1,2,3,4,5}

Пересечение множеств

Операция * создаёт множество из элементов, которые входят в оба множества.

begin
  var a := SetOf(1,2,3,4);
  var b := SetOf(3,4,5,6);

  Print(a * b);
end.

Результат:

{3,4}

Разность множеств

Операция - оздаёт множество из элементов первого множества, которых нет во втором.

begin
  var a := SetOf(1,2,3,4,5);
  var b := SetOf(2,4);

  Print(a - b);
end.

Результат:

{1,3,5}

Сравнение множеств

Два множества равны, если содержат одинаковые элементы независимо от порядка.

begin
  var a := SetOf(1,2,3);
  var b := SetOf(3,1,2);
  var c := SetOf(1,2,4);

  Println(a = b);
  Println(a = c);
end.

Результат:

True
False

Подмножество

Операции < и <= проверяют строгое и нестрогое включение одного множества в другое.

begin
  var a := SetOf(1,2);
  var b := SetOf(1,2,3);
  var c := SetOf(1,2);

  Println(a < b);
  Println(a <= c);
  Println(b <= a);
end.

Результат:

True
True
False

Удаление повторов

Метод ToSet преобразует массив и список во множество, удаляя повторяющиеся элементы.

begin
  var a := [3,1,2,3,2,4,1];

  var s := a.ToSet;

  Print(s);
end.