Delphi-Help

Set

Печать
Рейтинг пользователей: / 0
ХудшийЛучший 

Set

Описание

1 type Name = Set of Ordinal type;
2 type Name = Set of Value range;

Ключевое слово Set объявляет тип множества до 255 дискретных значений. Не путайте с перечислениями - они могут принимать только одно значение. Переменная множества всегда держит все значения набора - некоторые установлены, некоторые нет.

Перечислимый тип может быть:

Символы типа "A" и "5"
Целые числа в диапазоне от 0 до 255
Перечисления названий как Diamonds, Clubs

Помните, что Set является переменной. Также, в начале все возможные значения не установлены.

Когда вы инициализируете множество, вы можете установить все или некоторые из его значений.

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

Пример кода

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

 

Примечание

Каждый тип перечисления, или член набора, занимают один бит (32-байтовой) маски на 256 битов.

Любой из этих 32 байтов, который не содержит ни один из битов определения перечисления, опущен из набора, чтобы экономить память. См. примеры.

 

Авторизация



Счетчики