![]() |
Array mit zur Designzeit unbekannten Dimensionen
Gibt es ein Möglichkeit, die Dimensionen eines Arrays zur Laufzeit anzugeben?
Delphi-Quellcode:
gibt mir ja nur ein ein-Dimensionales (ar) bzw. zwei-Dimensionales (br) Array.
var
ar : array of Integer; br : array of array of Integer Doch ich bräuchte ein Array, bei dem erst zur Laufzeit bekannt wird, wieviele Dimensionen es besitzen wird. Gibt es da eine Möglichkeit bzw. kennt jemand eine Klasse, die mir sowas zur Verfügung stellt? |
Re: Array mit zur Designzeit unbekannten Dimensionen
Wäre mir nicht bekannt. könntest es aber mit Listen realisieren.
|
Re: Array mit zur Designzeit unbekannten Dimensionen
Hallo,
versuch es doch mal mit Variant-Arrays: Zitat:
|
Re: Array mit zur Designzeit unbekannten Dimensionen
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:
Plausibilitätsprüfungen musst du noch einbauen.
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; Grüße vom marabu |
Re: Array mit zur Designzeit unbekannten Dimensionen
@marabu:
Danke, das werde ich mir mal merken. Allerdings nutzt mir das bei meinem jetzigen Projekt leider nichts, da die Größe einer Dimension erst bestimmt werden kann, wenn die Dimension vorher erst berechnet wurde. Aber ich habe mein Problem jetzt mit Hilfe des VirtualStringTrees gelöst. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz