Множества
Множество 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.