Quick start manual

5-22
Delphi Language Guide
Structured types
Multidimensional dynamic arrays
To declare multidimensional dynamic arrays, use iterated array of ... constructions.
For example,
type TMessageGrid = array of array of string;
var Msgs: TMessageGrid;
declares a two-dimensional array of strings. To instantiate this array, call SetLength
with two integer arguments. For example, if I and J are integer-valued variables,
SetLength(Msgs,I,J);
allocates an I-by-J array, and Msgs[0,0] denotes an element of that array.
You can create multidimensional dynamic arrays that are not rectangular. The first
step is to call SetLength, passing it parameters for the first n dimensions of the array.
For example,
var Ints: array of array of Integer;
SetLength(Ints,10);
allocates ten rows for Ints but no columns. Later, you can allocate the columns one at
a time (giving them different lengths); for example
SetLength(Ints[2], 5);
makes the third column of Ints five integers long. At this point (even if the other
columns haven’t been allocated) you can assign values to the third column—for
example, Ints[2,4] := 6.
The following example uses dynamic arrays (and the IntToStr function declared in
the SysUtils unit) to create a triangular matrix of strings.
var
A : array of array of string;
I, J : Integer;
begin
SetLength(A, 10);
for I := Low(A) to High(A) do
begin
SetLength(A[I], I);
for J := Low(A[I]) to High(A[I]) do
A[I,J] := IntToStr(I) + ',' + IntToStr(J) + ' ';
end;
end;
Array types and assignments
Arrays are assignment-compatible only if they are of the same type. Because the
Delphi language uses name-equivalence for types, the following code will not
compile.
var
Int1: array[1..10] of Integer;
Int2: array[1..10] of Integer;
ƒ
Int1 := Int2;