Hallo Marc,
wenn es unbedingt arrays sein müssen, dann hilft in der Regel eine Adressumsetzung. Dabei wird mit den zur Laufzeit festgelegten Dimensionen auf ein eindimensionales Array zugegriffen:
Delphi-Quellcode:
var
ida: array of Integer;
dims: array of Integer;
function IntProduct(n: array of Integer): Integer;
var
i: Integer;
begin
if Length(n) > 0 then
begin
Result := n[0];
for i := 1 to High(n) do
Result := Result * n[i];
end else Result := 0;
end;
function FlatIndex(const dims, idx: array of Integer): Integer;
var
i: Integer;
begin
Result := 0;
for i := Low(idx) to High(idx) do
Result := Result * dims[i] + idx[i];
end;
procedure TDemoForm.ButtonClick(Sender: TObject);
var
i, j, k: Integer;
begin
SetLength(dims, 3);
dims[0] := 4;
dims[1] := 6;
dims[2] := 3;
SetLength(ida, IntProduct(dims));
for i := 0 to 3 do
for j := 0 to 5 do
for k := 0 to 2 do
ListBox.Items.Add(IntToStr(FlatIndex(dims, [i, j, k])));
end;
Plausibilitätsprüfungen musst du noch einbauen.
Grüße vom marabu