Enum-Arrays und Mengen

Ordnungstypen als Array-Index

Arrays fester Länge (Constant-length arrays)

Enumerationen und benutzerdefinierte Bereichs-Ordnungstypen können alle als Array-Index verwendet werden, um die Indexbereiche von Arrays flexibel festzulegen.

Hier ein Beispiel mit Enums als Array-Index

type
  // 1. Normaler numerischer Indexbereich 0~9
  TArrayOfTenStrings = array [0..9] of string;

  // 2. Bei 1 beginnender Indexbereich 1~10
  TArrayOfTenStrings1Based = array [1..10] of string;

  // 3. Benutzerdefinierter Ordnungstyp als Array-Index
  TMyNumber = 0..9;
  TAlsoArrayOfTenStrings = array [TMyNumber] of string;

  // 4. Enumerationstyp direkt als Array-Index (am häufigsten genutzt)
  TAnimalKind = (akDuck, akCat, akDog);
  TAnimalNames = array [TAnimalKind] of string;
var
  AnimalNameArr: TAnimalNames;
begin
  AnimalNameArr[akDuck] := 'Ente';
  AnimalNameArr[akCat] := 'Katze';
  AnimalNameArr[akDog] := 'Hund';
end;
Code-Sprache: PHP (php)

IntToStr ist eine Standardumwandlungsfunktion, definiert in der Einheit SysUtils. Funktion: Wandelt Ganzzahlen in Zeichenketten um.

Vollständiges Beispiel

{$ifdef FPC} {$mode objfpc} {$H+} {$endif}
{$codepage utf8}
program ArrayIndexDemo;

uses
  SysUtils; // Muss eingebunden werden, um IntToStr zu nutzen

type
  // 1. Normaler numerischer Indexbereich 0~9
  TArrayOfTenStrings = array [0..9] of string;

  // 2. Bei 1 beginnender Indexbereich 1~10
  TArrayOfTenStrings1Based = array [1..10] of string;

  // 3. Benutzerdefinierter Ordnungstyp als Array-Index
  TMyNumber = 0..9;
  TAlsoArrayOfTenStrings = array [TMyNumber] of string;

  // 4. Enumerationstyp direkt als Array-Index (am häufigsten genutzt)
  TAnimalKind = (akDuck, akCat, akDog);
  TAnimalNames = array [TAnimalKind] of string;

var

  // Array mit Indexbereich 0-9 erstellen
  Arr0To9: TArrayOfTenStrings;

  // Array mit Indexbereich 1-10 erstellen
  Arr1To10: TArrayOfTenStrings1Based;

  // Array mit benutzerdefiniertem Ordnungsindex erstellen
  ArrCustomIdx: TAlsoArrayOfTenStrings;

  // Variable I vom benutzerdefinierten Typ TMyNumber deklarieren
  I: TMyNumber;

  // Arrayvariable für Enumeration erstellen
  AnimalNameArr: TAnimalNames;

begin

  // 1. Nutzung des Arrays mit Indexen von 0 bis 9
  Arr0To9[0] := 'Element Nr.0'; // Zuweisung
  Arr0To9[5] := 'Mittelelement';
  Writeln(Arr0To9[0]); // Auslesen des Werts

  // 2. Nutzung des Arrays mit Startindex 1; Index 0 ist unzugänglich
  Arr1To10[1] := 'Erster Eintrag';
  Arr1To10[10] := 'Letzter Eintrag';
  Writeln(Arr1To10[10]);

  // 3. Iteration über Array mit benutzerdefiniertem Ordnungstyp als Index
  for I := Low(TMyNumber) to High(TMyNumber) do
  begin
    ArrCustomIdx[I] := 'Index ' + IntToStr(I);
  end;

  Writeln(ArrCustomIdx[3]);

  // Zuweisung von Werten an das Enum-Array mit Enum-Werten als Index
  AnimalNameArr[akDuck] := 'Ente';
  AnimalNameArr[akCat] := 'Katze';
  AnimalNameArr[akDog] := 'Hund';
end.Code-Sprache: PHP (php)

Bei der Kompilierung erscheinen zwei Warnungen

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 Zeilen kompiliert, 0,2 Sekunden, 68464 Bytes Code, 4276 Bytes Daten
2 Warnung(en) ausgegeben

D:\fpcdemo>mydemo
Element Nr.0
Letzter Eintrag
Index 3Code-Sprache: CSS (css)

Mengen-Typen

Sets, intern als Bitfelder (bit-fields) implementiert

Mengen werden auf Basis von Enumerationen oder Ordnungstypen definiert. Sie speichern mehrere Enum-Werte gebündelt und unterstützen Mengenoperationen sowie Hinzufügen/Entfernen von Elementen.

{$ifdef FPC} {$mode objfpc} {$H+} {$endif}
{$codepage utf8}
program ArrayIndexDemo;

type
  TAnimalKind = (akDuck, akCat, akDog);
  // Mengentyp basierend auf Enumeration definieren
  TAnimals = set of TAnimalKind;
var
  A: TAnimals;
begin
  A := [];                     // Literal für leere Menge
  A := [akDuck, akCat];        // Direkte Zuweisung mehrerer Elemente
  A := A + [akDog];            // Mengenvereinigung (Element hinzufügen)
  A := A * [akCat, akDog];     // Mengenschnitt (nur gemeinsame Elemente behalten)

  Include(A, akDuck);          // Eingebaute Funktion: Ein einzelnes Element hinzufügen
  Exclude(A, akDuck);          // Eingebaute Funktion: Ein einzelnes Element entfernen
end.
Code-Sprache: PHP (php)

Übersicht gängiger Mengenoperationen

  1. [] : Literal für leere Menge
  2. + : Vereinigung, Kombiniert zwei Elementgruppen
  3. * : Schnittmenge, Behält nur in beiden Mengen vorhandene Elemente
  4. Include(Menge, Element) : Sicheres Hinzufügen eines Elements
  5. Exclude(Menge, Element) : Sicheres Entfernen eines Elements

Previous:
Next:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert