Понимание Delphi SET Type

Один из Delphi язык особенности, которых нет в других современных языках, это понятие множеств.

Делфиустановить тип это коллекция значений одного и того же порядковый тип.

Набор определяется с помощью набор из ключевое слово:

Типы множеств обычно определяются с помощью поддиапазонов.

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

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

Ограничение наборов состоит в том, что они могут содержать до 255 элементов.

В приведенном выше примере тип набора TMagicSet представляет собой набор элементов TMagicNumber - целых чисел от 1 до 34.

Декларация TMagicSet = набор TMagicNumber равно следующей декларации: TMagicSet = набор 1..34.

Задать переменные типа

В приведенном выше примере переменные emptyMagicSet, oneMagicSet и anotherMagicSet наборы TMagicNumber.

instagram viewer

к назначить значение для переменной типа набора используйте квадратные скобки и перечислите все элементы набора. Как в:

Примечание 1: каждая переменная типа set может содержать пустой набор, обозначенный [].

Примечание 2: порядок элементов в наборе не имеет значения, и при этом не имеет смысла включать элемент (значение) дважды в набор.

Ключевое слово IN

Чтобы проверить, если элемент Включено в наборе (переменной) используйте В ключевое слово:

Операторы множества

Таким же образом вы можете суммировать два числа, вы можете иметь набор, который является суммой двух наборов. С сетами у вашего мероприятия больше операторов:

  • + возвращает объединение двух множеств.
  • - возвращает разницу двух наборов.
  • * возвращает пересечение двух множеств.
  • = вернуть true, если два набора равны - имеют один и тот же элемент.
  • <= возвращает true, если первый набор является подмножеством второго набора.
  • > = возвращает true, если первый набор является надмножеством второго набора.
  • <> возвращает true, если два набора не идентичны.
  • IN возвращает true, если элемент включен в набор.

Вот пример:

Будет ли выполнена процедура ShowMessage? Если так, что будет отображаться?

Вот реализация функции DisplayElements:

Подсказка: да. Показано: «18 | 24 |».

Целые числа, символы, логические значения

Конечно, при создании типов набора вы не ограничены целочисленными значениями. Порядковые типы Delphi включают символьные и логические значения.

Чтобы запретить пользователям вводить альфа-ключи, добавьте эту строку в OnKeyPress элемента управления редактирования:

Множества с перечислениями

Обычно используемый сценарий в коде Delphi состоит в смешивании перечислимых типов и типов множеств.

Вот пример:

Вопрос: будет ли отображаться сообщение? Ответ: нет :(

Наборы в Delphi Control Properties

Когда вам нужно применить «полужирный» к шрифту, используемому в элементах управления TEdit, вы используете либо Инспектор объектов, либо следующий код:

Свойство Font's Style является свойством установленного типа! Вот как это определяется:

Таким образом, перечислимый тип TFontStyle используется в качестве базового типа для типа набора TFontStyles. Свойство Style класса TFont имеет тип TFontStyles - поэтому это свойство типа set.

Другой пример включает в себя результат функции MessageDlg. Функция MessageDlg используется для вызова окна сообщения и получения ответа пользователя. Одним из параметров функции является параметр Buttons типа TMsgDlgButtons.

TMsgDlgButtons определяется как набор (mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore, mbAll, mbNoToAll, mbYesToAll, mbHelp).

Если вы отображаете сообщение для пользователя, содержащее кнопки «Да», «ОК» и «Отмена», и вы хотите выполнить некоторый код, если были нажаты кнопки «Да» или «ОК», вы можете использовать следующий код:

Последнее слово: наборы великолепны. Наборы могут показаться странными для Delphi новичок, но как только вы начнете использовать переменные типа set, вы обнаружите, что они предоставляют гораздо больше, чем это звучало в начале.