die jeweiligen Längen der einzelnen Dimensionen eines mehrdimensionalen Arrays (= Matrix) kann man so abfragen:
Delphi-Quellcode:
Zeilen := Length(Matrix); {1. Dimension}
Spalten := Length(Matrix[0]); {2. Dimension}
...
Wobei der Wert für jedes Subarray unterschiedlich sein kann. Z.B. kann
Matrix[1]
eine andere Länge haben als
Matrix[0]
.
Folgendes gilt für Delphi:
Bei einem statischen Array kann man die Anzahl der Dimensionen und auch die Länge jeder Dimension über TypeInfo direkt ermittelt werden. Bei dynamischen Arrays muss das iterativ geschehen und da gibt es auch keine Längeninformation (ist halt dynamisch).
Delphi-Quellcode:
uses
System.TypInfo;
type
ArrayOfArrayOfDouble = array of array of double;
var
cnt: Integer;
I: Integer;
Input: ArrayOfArrayOfDouble;
size: Cardinal;
ti: PTypeInfo;
td: PTypeData;
begin
ti := TypeInfo(ArrayOfArrayOfDouble);
if ti.Kind = tkDynArray then begin
td := ti.TypeData;
if (td.elType <> nil) and (td.elType^.Kind = tkDynArray) then begin
cnt := 0;
for I := 0 to Length(Input) - 1 do
Inc(cnt, Length(Input[I]));
size := cnt * td.elType^.TypeData.elSize;
end
else begin
size := Length(Input) * td.elSize;
end;
end;
end;