Ключевое слово Set объявляет тип множества до 255 дискретных значений. Не путайте с перечислениями - они могут принимать только одно значение. Переменная множества всегда держит все значения набора - некоторые установлены, некоторые нет.
Перечислимый тип может быть:
Символы типа "A" и "5" Целые числа в диапазоне от 0 до 255 Перечисления названий как Diamonds, Clubs
Помните, что Set является переменной. Также, в начале все возможные значения не установлены.
Когда вы инициализируете множество, вы можете установить все или некоторые из его значений.
Потом вы можете проверить переменную, чтобы узнать, находится ли ее значение в наборе. Вы можете захотеть сделать это, например, при анализе кода, чтобы узнать, является ли следующий символ символом строчных букв.
Примечания
Каждый тип перечисления, или член набора, занимают один бит (32-байтовой) маски на 256 битов.
Любой из этих 32 байтов, который не содержит ни один из битов определения перечисления, опущен из набора, чтобы экономить память. См. примеры.
Похожие команды
Exclude Исключает значение из переменной набора (множества)
In Используется, чтобы проверить, является ли значение членом множества
var Alphabet : Set of 'A'..'z'; // Набор букв
begin Alphabet := ['A'..'z']; // Заполнение всех значений // Проверяем значения против набора алфавита
if 'Z' in Alphabet
then ShowMessage('Z в Alphabet')
else ShowMessage('Z не в Alphabet');
if 'd' in Alphabet
then ShowMessage('d в Alphabet')
else ShowMessage('d не в Alphabet');
if '1' in Alphabet
then ShowMessage('1 в Alphabet')
else ShowMessage('1 не в Alphabet');
end;
Z в Alphabet
d в Alphabet
1 не в Alphabet
Пример кода : Наборы положительных чисел
var SmallNums : Set of 0..55; // Набор первых 56 членов набора LargeNums : Set of 200..255; // Набор последних 56 членов набора FullNums : Set of 0..255; // Набор всех 256 членов набора
begin // Мы имеем диапазон значений от 0 до 55, которые мы можем установить // Обратите внимание на большую гибкость, которую мы имеем в установке значений // Мы можем определить множественные диапазоны, и индивидуальных членов SmallNums := [3..12,23,30..32]; // Заполнение значениями только некоторых из членов // Показ памяти, занятой этими наборами // Каждый член набора занимает один бит одного байта из 32 возможных байтов.
ShowMessage('SmallNums занимают : '+IntToStr(SizeOf(SmallNums))+'
байт');
ShowMessage('LargeNums занимают : '+IntToStr(SizeOf(LargeNums))+'
байт');
ShowMessage('AllNums занимают : '+IntToStr(SizeOf(FullNums))+'
байт'); // Проверяем значения против маленького набора чисел
if 12 in SmallNums
then ShowMessage('12 в SmallNums')
else ShowMessage('12 не в SmallNums');
if 13 in SmallNums
then ShowMessage('13 в SmallNums')
else ShowMessage('13 не в SmallNums');
if 30 in SmallNums
then ShowMessage('30 в SmallNums')
else ShowMessage('30 не в SmallNums');
end;
SmallNums занимают : 7 bytes
LargeNums занимают : 7 bytes
AllNums занимают : 32 bytes
12 в SmallNums
13 не в SmallNums
30 в SmallNums
Пример кода : Наборы перечисляемых значений определяемых пользователем
type
TNumber = (Ace, One, Two, Three, Four, Five, Siz, Seven, Eight,
Nine, Ten, Jack, Queen, King);
var CourtCards: Set of TNumber; // Масти карт
CardNumbers : array[1..4] of TNumber;
i : Integer;
begin // Устанавливаем числа карт, чтобы позволить только карты с изображением
CourtCards := [Ace, Jack, Queen, King]; // определение нескольких карт
CardNumbers[1] := Ace;
CardNumbers[2] := Four;
CardNumbers[3] := Jack;
CardNumbers[4] := Seven; // Показываем карты с изображением, которые мы имеем
for i := 1 to 4 do
if CardNumbers[i] in CourtCards
then ShowMessage('Card '+IntToStr(i)+' масть карт');
end;