13. Множества

Множества - это наборы однотипных логически связанных друг с другом объектов. Характер связей между объектами лишь подразумевается программистом и никак не контролируется Object Pascal. Количество элементов, входящих во множество, может меняться в пределах от 0 до 256 (множество, не содержащее элементов, называется пустым). Именно непостоянством количества своих элементов множества отличаются от массивов и записей.

Два множества считаются эквивалентными тогда и только тогда, когда все их элементы одинаковы, причем порядок следования элементов во множестве безразличен. Если все элементы одного множества входят также и в другое, говорят о включении первого множества во второе. Пустое множество включается в любое другое.

В Pascal Script допускается составление множеств только из перечисляемого типа.

Примеры использования множеств и операций над множествами:

type
  TMyButton = (bnOk, bnCancel, bnYes, bnNo);
  TMyButtons = set of TMyButton;
var
  MyButtons: TMyButtons;
begin
  // Присваиваем множество переменной. Множество представляет собой элементы в квадратных
  // скобках, разделенные запятой
  MyButtons := [bnOk, bnCancel];
  // Включаем во множество элемент. Получаем [bnOk, bnCancel, bnYes]
  Include(MyButtons, bnYes];
  // Исключаем из множества элемент. Получаем [bnOk, bnYes]
  Exclude(MyButtons, bnCancel);
  // Пересечение множеств. Результатом будет множество, элементы которого есть в обоих
  // множествах. Получаем [bnYes]
  MyButtons := MyButtons * [bnYes, bnNo];
  // Объединение множеств. Первое множество дополняется недостающими элементами из второго
  // множества. Получаем [bnYes, bnNo]
  MyButtons := MyButtons + [bnYes, bnNo];
  // Разность множеств. Результат содержит элементы из первого множества, которые не
  // принадлежат второму. Получаем [bnNo]
  MyButtons := MyButtons - [bnYes];
  // Проверка эквивалентности. Получаем True, т. к. множества эквиваленты
  if MyButtons = [bnNo] then// Проверка неэквивалентности
  if MyButtons <> [bnYes, bnNo] then// Проверка вхождения. Возвращает True если первое множество включено во второе
  if MyButtons <= [bnYes, bnNo, bnCancel] then// Проверка вхождения. Возвращает True если второе множество включено в первое
  if MyButtons >= [bnYes, bnNo, bnCancel] then// С помощью оператора in определяем принадлежность элемента множеству. Слева от
  // оператора in может быть произвольное выражение
  if bnOk in MyButtons thenend;