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 then … end;