Arrays de enumeração e conjuntos

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;
Lenguaje del código: 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.Lenguaje del código: 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 3Lenguaje del código: 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.
Lenguaje del código: PHP (php)

Explicação das operações comuns de conjunto

  1. [] : Literal de conjunto vazio
  2. + : União, mescla dois grupos de elementos
  3. * : Interseção, retém elementos presentes em ambos os conjuntos
  4. Include(Conjunto, Elemento) : Adicionar elemento de forma segura
  5. Exclude(Conjunto, Elemento) : Remover elemento de forma segura

Previous:
Next:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *