Разбиране на тип Delphi SET

click fraud protection

Един от Делфи език черти, които не се срещат в други съвременни езици, е представата за множествата.

на Delphiзададен тип е съвкупност от стойности на едно и също порядъчен тип.

Наборът се дефинира с помощта на набор от ключова дума:

Типовете набори обикновено се дефинират с поддиапазони.

В горния пример, TMagicNumber е персонализиран поддиапазонен тип, позволяващ на променливите от типа TMagicNumber да получават стойности от 1 до 34. Просто казано, поддиапазонният тип представлява подмножество от стойности в друг порядъчен тип.

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

Ограничение за наборите е, че те могат да съдържат до 255 елемента.

В горния пример, типът TMagicSet е набор от елементи на TMagicNumber - цели числа от 1 до 34.

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

Задайте тип променливи

В горния пример променливите emptyMagicSet, oneMagicSet и anotherMagicSet са комплекти от TMagicNumber.

instagram viewer

Да се задайте стойност към променлива тип набор, използвайте квадратните скоби и избройте всички елементи от набора. Както в:

Забележка 1: всяка променлива тип набор може да съдържа празния набор, обозначен с [].

Забележка 2: редът на елементите в даден набор няма смисъл, нито има смисъл елемент (стойност) да бъде включен два пъти в набор.

Ключовата дума IN

За да проверите дали елемент е включен в множеството (променлива) използвайте ПО ключова дума:

Задайте оператори

По същия начин можете да сумирате две числа, можете да имате набор, който е сумата от два множества. С набори вашето събитие има повече оператори:

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

Ето пример:

Ще се изпълни ли ShowMessage процедурата? Ако е така, какво ще се покаже?

Ето изпълнението на функцията DisplayElements:

Съвет: да. Показва се: "18 | 24 |".

Цели числа, герои, були

Разбира се, когато създавате типове набори, не сте ограничени до цели числа. Обикновените типове на Delphi включват знаци и булеви стойности.

За да попречите на потребителите да въвеждат алфа бутони, добавете този ред в полето OnKeyPress на контрола за редактиране:

Комплекти с изброявания

Често използван сценарий в кода на Delphi е да се смесват както изброени типове, така и зададени типове.

Ето пример:

Въпрос: ще се покаже ли съобщението? Отговор: не :(

Задава в Delphi Control Properties

Когато трябва да приложите "bold" към шрифта, използван в контролите TEdit, или използвате Object Inspector или следния код:

Свойството Style на шрифта е собственост от зададен тип! Ето как се дефинира:

И така, изброеният тип TFontStyle се използва като основен тип за зададения тип TFontStyles. Свойството Style на клас TFont е от тип TFontStyles - следователно свойство тип набор.

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

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

Ако покажете на потребителя съобщение, съдържащо бутони Да, ОК и Отказ и искате да изпълните някакъв код, ако щракнете върху бутоните Да или ОК, можете да използвате следния код:

Последна дума: комплектите са страхотни. Наборите може да изглеждат объркващи за a Делфи начинаещ, но веднага щом започнете да използвате променливи от зададен тип, ще разберете, че те предоставят много повече, отколкото това звучи в началото.

instagram story viewer