Tipos ordinais como subscritos de array
Arrays de comprimento fixo (Constant-length arrays)
Enumerações e tipos ordinais de intervalo personalizados podem ser usados como subscritos de array, permitindo definir intervalos de índice de forma flexível.
Exemplo de enumeração usada como subscrito de array
type
// 1. Subscrito numérico comum, intervalo 0~9
TArrayOfTenStrings = array [0..9] of string;
// 2. Subscrito iniciando em 1, intervalo 1~10
TArrayOfTenStrings1Based = array [1..10] of string;
// 3. Tipo ordinal personalizado usado como subscrito
TMyNumber = 0..9;
TAlsoArrayOfTenStrings = array [TMyNumber] of string;
// 4. Tipo enum diretamente como subscrito (mais utilizado)
TAnimalKind = (akDuck, akCat, akDog);
TAnimalNames = array [TAnimalKind] of string;
var
AnimalNameArr: TAnimalNames;
begin
AnimalNameArr[akDuck] := 'Pato';
AnimalNameArr[akCat] := 'Gato';
AnimalNameArr[akDog] := 'Cachorro';
end;
Code language: PHP (php)
IntToStr é uma função de conversão padrão definida na unidade SysUtils. Finalidade: Converter valores inteiros para cadeias de caracteres.
Exemplo completo
{$ifdef FPC} {$mode objfpc} {$H+} {$endif}
{$codepage utf8}
program ArrayIndexDemo;
uses
SysUtils; // Obrigatório importar para usar IntToStr
type
// 1. Subscrito numérico comum, intervalo 0~9
TArrayOfTenStrings = array [0..9] of string;
// 2. Subscrito iniciando em 1, intervalo 1~10
TArrayOfTenStrings1Based = array [1..10] of string;
// 3. Tipo ordinal personalizado usado como subscrito
TMyNumber = 0..9;
TAlsoArrayOfTenStrings = array [TMyNumber] of string;
// 4. Tipo enum diretamente como subscrito (mais utilizado)
TAnimalKind = (akDuck, akCat, akDog);
TAnimalNames = array [TAnimalKind] of string;
var
// Criar array com subscritos 0-9
Arr0To9: TArrayOfTenStrings;
// Criar array com subscritos 1-10
Arr1To10: TArrayOfTenStrings1Based;
// Criar array com índice ordinal personalizado
ArrCustomIdx: TAlsoArrayOfTenStrings;
// Declarar variável I do tipo ordinal personalizado TMyNumber
I: TMyNumber;
// Criar variável de array de enumeração
AnimalNameArr: TAnimalNames;
begin
// 1. Utilização do array com subscritos 0~9
Arr0To9[0] := 'Elemento nº0'; // Atribuição
Arr0To9[5] := 'Elemento do meio';
Writeln(Arr0To9[0]); // Leitura do valor
// 2. Utilização do array com início em 1; não é possível acessar com índice 0
Arr1To10[1] := 'Primeiro item';
Arr1To10[10] := 'Último item';
Writeln(Arr1To10[10]);
// 3. Iterar array utilizando o tipo ordinal TMyNumber como subscrito
for I := Low(TMyNumber) to High(TMyNumber) do
begin
ArrCustomIdx[I] := 'Índice ' + IntToStr(I);
end;
Writeln(ArrCustomIdx[3]);
// Demonstração de atribuição ao array enum usando valores enum como subscritos
AnimalNameArr[akDuck] := 'Pato';
AnimalNameArr[akCat] := 'Gato';
AnimalNameArr[akDog] := 'Cachorro';
end.Code language: PHP (php)
O compilador emite dois avisos
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 linhas compiladas, 0,2 seg, 68464 bytes código, 4276 bytes dados
2 aviso(s) emitidos
D:\fpcdemo>mydemo
Elemento nº0
Último item
Índice 3Code language: CSS (css)
Tipos de conjunto
Sets, implementados internamente como campos de bits (bit-fields)
Conjuntos são definidos com base em enumerações ou tipos ordinais. Armazenam conjuntos de valores enum em lote e suportam operações de conjunto, além de adicionar e remover elementos.
{$ifdef FPC} {$mode objfpc} {$H+} {$endif}
{$codepage utf8}
program ArrayIndexDemo;
type
TAnimalKind = (akDuck, akCat, akDog);
// Definir tipo de conjunto baseado em enumeração
TAnimals = set of TAnimalKind;
var
A: TAnimals;
begin
A := []; // Literal de conjunto vazio
A := [akDuck, akCat]; // Atribuição direta de múltiplos elementos
A := A + [akDog]; // União de conjuntos (adicionar elemento)
A := A * [akCat, akDog]; // Interseção de conjuntos (manter apenas elementos compartilhados)
Include(A, akDuck); // Função nativa: adicionar um único elemento
Exclude(A, akDuck); // Função nativa: remover um único elemento
end.
Code language: PHP (php)
Explicação das operações comuns de conjunto
[]: Literal de conjunto vazio+: União, mescla dois grupos de elementos*: Interseção, retém elementos presentes em ambos os conjuntosInclude(Conjunto, Elemento): Adicionar elemento de forma seguraExclude(Conjunto, Elemento): Remover elemento de forma segura