Delphi справочник - Форум программистов - Навигация  
 A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z      По первой букве  
System     SysUtils     StrUtils     DateUtils     FileCtrl     ConvUtils     StdConvs     Math     Classes     Dialogs     Types     Variants    ПО Unit   Compiler directives     Directives     Keywords     Types     Variables     Constants     Functions     Procedures    По категории  

форум программистов

Основы Delphi
Set
Ключевое слово
Определяет множество до 255 различных значений unit
  
1 type Name = Set of Ordinal type;

2 type Name = Set of Value range;
Описание
Ключевое слово 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 масть карт
 


Оплата за обучение в Kata Academy только после твоего трудоустройства в IT, начни карьеру Middle Java-разработчика



Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки? Slurm подготовили для вас особенный продукт!





форум программистов


© Форум Delphi  |  Форум Pascal   |  Блог программистов   |  Исходники Delphi   |  Автор сайта  |  Ссылки   |  Английская версия