Ordinal Types as Array Subscripts
Constant-length arrays
Enumerations and custom range ordinal types can be used as array subscripts, allowing flexible customization of array index ranges.
Example: Enums as Array Subscripts
type
// 1. Numeric range index 0~9
TArrayOfTenStrings = array [0..9] of string;
// 2. 1-based index range 1~10
TArrayOfTenStrings1Based = array [1..10] of string;
// 3. Custom ordinal type for array indexing
TMyNumber = 0..9;
TAlsoArrayOfTenStrings = array [TMyNumber] of string;
// 4. Enumeration type directly as array subscript (most common usage)
TAnimalKind = (akDuck, akCat, akDog);
TAnimalNames = array [TAnimalKind] of string;
var
AnimalNameArr: TAnimalNames;
begin
AnimalNameArr[akDuck] := 'Duck';
AnimalNameArr[akCat] := 'Cat';
AnimalNameArr[akDog] := 'Dog';
end;
Code language: PHP (php)
IntToStr is a standard conversion function defined in the SysUtils unit. Purpose: Convert integer values to strings.
Full Demo Program
{$ifdef FPC} {$mode objfpc} {$H+} {$endif}
{$codepage utf8}
program ArrayIndexDemo;
uses
SysUtils; // Required unit for IntToStr
type
// 1. Numeric range index 0~9
TArrayOfTenStrings = array [0..9] of string;
// 2. 1-based index range 1~10
TArrayOfTenStrings1Based = array [1..10] of string;
// 3. Custom ordinal type for array indexing
TMyNumber = 0..9;
TAlsoArrayOfTenStrings = array [TMyNumber] of string;
// 4. Enumeration type directly as array subscript (most common usage)
TAnimalKind = (akDuck, akCat, akDog);
TAnimalNames = array [TAnimalKind] of string;
var
// Array with index range 0-9
Arr0To9: TArrayOfTenStrings;
// Array with 1-based index range 1-10
Arr1To10: TArrayOfTenStrings1Based;
// Array using custom ordinal index type
ArrCustomIdx: TAlsoArrayOfTenStrings;
// Loop variable of custom ordinal type TMyNumber
I: TMyNumber;
// Enumeration-indexed array variable
AnimalNameArr: TAnimalNames;
begin
// 1. Usage of array with 0~9 indexes
Arr0To9[0] := 'Element No.0'; // Assignment
Arr0To9[5] := 'Middle Element';
Writeln(Arr0To9[0]); // Value retrieval
// 2. Usage of 1-based array; index 0 cannot be accessed
Arr1To10[1] := 'First Item';
Arr1To10[10] := 'Last Item';
Writeln(Arr1To10[10]);
// 3. Iterate array indexed by custom ordinal TMyNumber
for I := Low(TMyNumber) to High(TMyNumber) do
begin
ArrCustomIdx[I] := 'Index ' + IntToStr(I);
end;
Writeln(ArrCustomIdx[3]);
// Assign values to enum-indexed array with enum literals as subscripts
AnimalNameArr[akDuck] := 'Duck';
AnimalNameArr[akCat] := 'Cat';
AnimalNameArr[akDog] := 'Dog';
end.Code language: PHP (php)
Two compiler warnings generated
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 lines compiled, 0.2 sec, 68464 bytes code, 4276 bytes data
2 warning(s) issued
D:\fpcdemo>mydemo
Element No.0
Last Item
Index 3Code language: CSS (css)
Set Types
Sets, implemented internally as bit-fields
Sets are defined based on enumeration or ordinal types. They store a collection of enum values in bulk and support set arithmetic, element addition and removal.
{$ifdef FPC} {$mode objfpc} {$H+} {$endif}
{$codepage utf8}
program ArrayIndexDemo;
type
TAnimalKind = (akDuck, akCat, akDog);
// Define set type based on enumeration
TAnimals = set of TAnimalKind;
var
A: TAnimals;
begin
A := []; // Empty set literal
A := [akDuck, akCat]; // Direct assignment of multiple elements
A := A + [akDog]; // Set union (add element)
A := A * [akCat, akDog]; // Set intersection (retain shared elements)
Include(A, akDuck); // Built-in routine: add single element
Exclude(A, akDuck); // Built-in routine: remove single element
end.
Code language: PHP (php)
Common Set Operators & Routines
[]: Empty set literal+: Union, merge two groups of elements*: Intersection, retain elements present in both setsInclude(Set, Element): Safely add an elementExclude(Set, Element): Safely remove an element
Previous: Enumerated Type