Описание |
Ключевое слово Set объявляет тип множества до 255 дискретных значений. Не путайте с перечислениями - они могут принимать только одно значение. Переменная множества всегда держит все значения набора - некоторые установлены, некоторые нет.
Перечислимый тип может быть:
Символы типа "A" и "5"
Целые числа в диапазоне от 0 до 255
Перечисления названий как Diamonds, Clubs
Помните, что Set является переменной. Также, в начале все возможные значения не установлены.
Когда вы инициализируете множество, вы можете установить все или некоторые из его значений.
Потом вы можете проверить переменную, чтобы узнать, находится ли ее значение в наборе. Вы можете захотеть сделать это, например, при анализе кода, чтобы узнать, является ли следующий символ символом строчных букв.
|
|
Примечания |
Каждый тип перечисления, или член набора, занимают один бит (32-байтовой) маски на 256 битов.
Любой из этих 32 байтов, который не содержит ни один из битов определения перечисления, опущен из набора, чтобы экономить память. См. примеры.
|
|
Похожие команды |
Exclude Исключает значение из переменной набора (множества)
In Используется, чтобы проверить, является ли значение членом множества
Include Включает значение во множество переменных
| |
|
Пример кода : Набор символов |
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;
|
Card 1 масть карт
Card 3 масть карт
|
|