Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Array mit zur Designzeit unbekannten Dimensionen

  Alt 13. Jun 2006, 10:32
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
  Mit Zitat antworten Zitat