Множество - это набор элементов (объектов) одного и того же типа. Оно может состоять из произвольного числа элементов (в Delphi не более чем из 256), в том числе не иметь ни одного элемента (пустое множество). Все элементы множества должны быть различны (если вы и попытаетесь добавить элемент, который уже имеется в множестве, то просто ничего не произойдёт).
Объявляются множества с помощью зарезервированных слов set и of, после которых указывается тип элементов (базовый тип):
Type
Имя = set of тип_элементов;
Базовым типом могут быть: логический тип, символьный тип char, перечисляемый и интервальный типы, содержащие не более 256 элементов. Типы целых и вещественных чисел не могут быть базовым типом, поскольку они заведомо содержат более 256 элементов.
Например:
Type
A= set of 1..100;
B= set of boolean;
C= set of char;
TColor = (Red, Orange, Yellow, Green, Cyan, Blue, Violet);
Color= set of TColor;
Или так
color= set of (Red, Orange, Yellow, Green, Cyan, Blue, Violet);
Множество A может содержать 100 элементов со значениями от 1 до 100. Множество B может содержать 2 элемента со значениями FALSE и TRUE. Множество С может содержать 255 символов.
Множество color может содержать до 7 цветов радуги.
Интервальный тип должен укладываться в диапазон 0..255, поэтому объявление
A1= set of 0..25
5;
правильное, а A2= set of 1..256; - неправильное.
После задания новых типов, можно объявлять переменные и типизированные константы:
Var clr1, clr2, clr2: color;
Ch: C;
Numbers: A;
Bool: B;
При объявлении переменные инициализируются пустым множеством [], то есть не содержат ни одного элемента.
Объявление типизированной константы можно совмещать с инициализацией множества. Для этого в квадратных скобках нужно перечислить через запятую значения элементов множества (допускаются интервалы значений):
const
prime: set of 2..10= [2,3,5,7]; alphabet : set of char= ['а'..'я’];
Такой способ определения называется конструктором множества. С его помощью можно присваивать значения переменным:
clr1:= []; //пустое, «бесцветное» множество
clr2:= [Red, Orange, Yellow],//множество тёплых цветов clr3:= [Green..Violet]; //множество холодных цветов
Поскольку элементы в множестве не упорядочены, то последовательность их добавления в множество значения не имеет. Например, три операции присваивания дадут то же самое множество, что
clr2:= [Red, Orange,Yellow];:
clr2:= [Orange]; clr2:= clr2+[Red]; clr2:= clr2+[Yellow];
Для добавления элементов в множество можно использовать процедуру include(S,I), которая выполняет те же действия, что и оператор S := S + , но даёт более быстрый код:
Include(clr2,Orange);
Include(clr2,Red);
Include(clr2,Yellow);
Для обратной операции - исключения элемента из множества - служит процедура exclude(S,I), которая выполняет те же действия, что и оператор S := S - , но даёт более быстрый код:
clr2:= [Red, Orange, Yellow];
exclude(clr2,Red); // исключить из множества красный цвет.