![]() |
Länge zwei dimensionaler, dynamischer Arrays bestimmen ?
Hallo,
ich habe ein dynamisches Array gemacht:
Delphi-Quellcode:
und würde in einer anderen Funktion, ohne die Parameter übergeben zu müssen oder in dem Array zu speichern, xdim und ydim herausbekommen.
dynMatrix = array of array of double;
.... SetLength(dynmat^, xdim, ydim);
Delphi-Quellcode:
liefert nur einen double-wert zurück...
Length(dynmat^)
|
Re: Länge zwei dimensionaler, dynamischer Arrays bestimmen ?
Spalte auf
Delphi-Quellcode:
TZeile = array of double;
TDynMatrix = array of TZeile; |
Re: Länge zwei dimensionaler, dynamischer Arrays bestimmen ?
Ach so ! :wall:
|
Re: Länge zwei dimensionaler, dynamischer Arrays bestimmen ?
Hallo,
erst die Zeilen, dann die Spalten indizieren - und keine Dereferenzierung:
Delphi-Quellcode:
Freundliche Grüße
type
TDoubleMatrix = array of array of Double; var mat: TDoubleMatrix; xDim, yDim: Integer; begin SetLength(mat, 42, 17); yDim := Length(mat); xDim := Length(mat[Low(mat)]); end; |
Re: Länge zwei dimensionaler, dynamischer Arrays bestimmen ?
Das ist natürlich noch schöner !
Vielen Dank ! Die Dereferenzierung muss aber scheinbar schon sein, ich habe das oben vergessen zu schreiben, ich habe für die Funktionen nur Pointer zu den Arrays übergeben. Sorry wegen eventueller Missverständnisse |
Re: Länge zwei dimensionaler, dynamischer Arrays bestimmen ?
Statt eines Pointers könntest du die Matrix auch als var-Parameter übergeben.
Das wäre dann Call-By-Reference nach Pascal Art.
Delphi-Quellcode:
Getippt und nicht getestet.
procedure MatrixMultiply(var mat: TDoubleMatrix; scalar: Double);
var yDim, xDim: Integer; begin for yDim := Low(mat) to High(mat) do for xDim := Low(mat[yDim]) to High(mat[yDim]) do mat[yDim, xDim] := mat[yDim, xDim] * scalar; end; procedure Test; var yDim, xDim: Integer; mat: TDoubleMatrix; begin SetLength(mat, 3, 3); for yDim := Low(mat) to High(mat) do for xDim := Low(mat[yDim]) to High(mat[yDim]) do mat[yDim, xDim] := 1; MatrixMultiply(mat, 2); ShowMessage(FloatToStr(mat[0, 0])); SetLength(mat, 0, 0); end; |
Re: Länge zwei dimensionaler, dynamischer Arrays bestimmen ?
Aber das ist dann intern dasselbe, oder wird die ganze Matrix dabei kopiert?
|
Re: Länge zwei dimensionaler, dynamischer Arrays bestimmen ?
Arrays mit statischen Grenzen (array [n..m{, x..y}]) sind Datenblöcke - bei einem "var" oder "const"-Parameter werden Referenzen übergeben, ansonsten wird kopiert.
Dynamische Arrays sind aber an sich schon Referenzen, der Geschwindigkeitsvorteil gegenüber den statischen Arrays ist also bei CallByRef nicht gegeben - dafür kann man aber *sicher* das übergebene Array bearbeiten (var) ohne es zu kopieren, oder man *darf* es nicht bearbeiten (const). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:43 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