Порядковые типы как индексы массивов
Массивы фиксированной длины Constant-length arrays
Перечислимые типы и пользовательские порядковые диапазоны можно использовать как индексы массивов, чтобы гибко задавать диапазоны индексов.
Ниже пример перечисления как индекса массива
type
// 1. Обычный числовой диапазон индексов 0~9
TArrayOfTenStrings = array [0..9] of string;
// 2. Индексы с началом от единицы 1~10
TArrayOfTenStrings1Based = array [1..10] of string;
// 3. Пользовательский порядковый тип для индекса массива
TMyNumber = 0..9;
TAlsoArrayOfTenStrings = array [TMyNumber] of string;
// 4. Перечислимый тип напрямую как индекс (самый распространённый случай)
TAnimalKind = (akDuck, akCat, akDog);
TAnimalNames = array [TAnimalKind] of string;
var
AnimalNameArr: TAnimalNames;
begin
AnimalNameArr[akDuck] := 'Утка';
AnimalNameArr[akCat] := 'Кошка';
AnimalNameArr[akDog] := 'Собака';
end;
Code language: PHP (php)
IntToStr — стандартная функция преобразования, объявлена в модуле SysUtils. Назначение: преобразовать целое число в строку.
Полный пример
{$ifdef FPC} {$mode objfpc} {$H+} {$endif}
{$codepage utf8}
program ArrayIndexDemo;
uses
SysUtils; // Обязательно подключите для использования IntToStr
type
// 1. Обычный числовой диапазон индексов 0~9
TArrayOfTenStrings = array [0..9] of string;
// 2. Индексы с началом от единицы 1~10
TArrayOfTenStrings1Based = array [1..10] of string;
// 3. Пользовательский порядковый тип для индекса массива
TMyNumber = 0..9;
TAlsoArrayOfTenStrings = array [TMyNumber] of string;
// 4. Перечислимый тип напрямую как индекс (самый распространённый случай)
TAnimalKind = (akDuck, akCat, akDog);
TAnimalNames = array [TAnimalKind] of string;
var
// Создать массив с индексами от 0 до 9
Arr0To9: TArrayOfTenStrings;
// Создать массив с индексами от 1 до 10
Arr1To10: TArrayOfTenStrings1Based;
// Создать массив с пользовательским порядковым индексом
ArrCustomIdx: TAlsoArrayOfTenStrings;
// Переменная I пользовательского порядкового типа TMyNumber
I: TMyNumber;
// Переменная массива перечислений
AnimalNameArr: TAnimalNames;
begin
// 1. Использование массива с индексами 0~9
Arr0To9[0] := 'Элемент №0'; // Присвоение значения
Arr0To9[5] := 'Средний элемент';
Writeln(Arr0To9[0]); // Чтение значения
// 2. Массив с индексами от единицы, доступ по индексу 0 запрещён
Arr1To10[1] := 'Первый элемент';
Arr1To10[10] := 'Последний элемент';
Writeln(Arr1To10[10]);
// 3. Обход массива через пользовательский порядковый тип TMyNumber
for I := Low(TMyNumber) to High(TMyNumber) do
begin
ArrCustomIdx[I] := 'Индекс ' + IntToStr(I);
end;
Writeln(ArrCustomIdx[3]);
// Пример заполнения массива перечислений через значения перечисления как индексы
AnimalNameArr[akDuck] := 'Утка';
AnimalNameArr[akCat] := 'Кошка';
AnimalNameArr[akDog] := 'Собака';
end.Code language: PHP (php)
При компиляции появляются два предупреждения
D:\fpcdemo>fpc mydemo.dpr
Free Pascal Compiler version 3.2.2 [2021/05/15] for i386
Copyright (c) 1993-2021 by Florian Klaempfl and others
Target OS: Win32 for i386
Compiling mydemo.dpr
mydemo.dpr(55,35) Warning: Implicit string type conversion from "AnsiString" to "UnicodeString"
mydemo.dpr(55,33) Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "AnsiString"
Linking mydemo.exe
63 строк скомпилировано, 0,2 сек, 68464 байт кода, 4276 байт данных
2 предупреждений выведено
D:\fpcdemo>mydemo
Элемент №0
Последний элемент
Индекс 3Code language: CSS (css)
Типы множеств
Sets, под капотом реализованы как битовые поля bit-fields
Множества объявляются на основе перечислимых или порядковых типов, хранят набор значений перечислений, поддерживают операции над множествами и добавление/удаление элементов.
{$ifdef FPC} {$mode objfpc} {$H+} {$endif}
{$codepage utf8}
program ArrayIndexDemo;
type
TAnimalKind = (akDuck, akCat, akDog);
// Объявить тип множества на основе перечисления
TAnimals = set of TAnimalKind;
var
A: TAnimals;
begin
A := []; // Пустое множество
A := [akDuck, akCat]; // Прямое присвоение нескольких элементов
A := A + [akDog]; // Объединение множеств (добавить элемент)
A := A * [akCat, akDog]; // Пересечение множеств (оставить общие элементы)
Include(A, akDuck); // Встроенная функция: добавить один элемент
Exclude(A, akDuck); // Встроенная функция: удалить один элемент
end.
Code language: PHP (php)
Описание популярных операций над множествами
[]: Литерал пустого множества+: Объединение, объединяет две группы элементов*: Пересечение, сохраняет элементы присутствующие в обоих множествахInclude(Множество, Элемент): Безопасное добавление элементаExclude(Множество, Элемент): Безопасное удаление элемента
Previous: Перечислимый тип
Next: Цикл