Arrays
9.1 Static Arrays
var
Scores: array[1..5] of Integer; // custom index range
Matrix: array[0..2, 0..2] of Double; // 2D
Days: array[TDayOfWeek] of string; // indexed by an enum
begin
Scores[1] := 90;
for var I := Low(Scores) to High(Scores) do Scores[I] := I * 10;
Writeln(Length(Scores));
end;9.2 Dynamic Arrays
Dynamic arrays are reference types (reference counted). Assignment shares the data. Use Copy for a clone.
var
Nums: array of Integer; // or TArray<Integer> (preferred: type-compatible)
Grid: TArray<TArray<Integer>>; // jagged
begin
SetLength(Nums, 5); // 0-based: Nums[0]..Nums[4], zero-initialized
Nums[0] := 10;
Nums := [1, 2, 3]; // array literal (XE7+)
Nums := Nums + [4, 5]; // concatenation
Insert(99, Nums, 0); // insert at index
Delete(Nums, 1, 2); // delete 2 elements at index 1
Writeln(Length(Nums), ' ', High(Nums));
var Copy2 := Copy(Nums); // dynamic arrays are references! Copy() makes an independent copy
SetLength(Grid, 3, 4); // rectangular dynamic 2D
Nums := nil; // free
end;9.3 TArray Helpers (System.Generics.Collections)
uses System.Generics.Collections, System.Generics.Defaults;
var A: TArray<Integer> := [5, 3, 8, 1];
TArray.Sort<Integer>(A);
TArray.Sort<Integer>(A, TComparer<Integer>.Construct(
function(const L, R: Integer): Integer
begin
Result := R - L; // descending
end));
var Idx: Integer;
if TArray.BinarySearch<Integer>(A, 8, Idx) then Writeln('found at ', Idx);
var Parts: TArray<string>;
for var X in A do Parts := Parts + [X.ToString];
var Joined := string.Join(',', Parts);9.4 Open Arrays and Array Constants
const Primes: array[0..4] of Integer = (2, 3, 5, 7, 11);
procedure PrintArray(const Arr: array of Integer);
begin
for var I := Low(Arr) to High(Arr) do Write(Arr[I], ' ');
end;
PrintArray(Primes);
PrintArray([1, 2, 3]);
PrintArray(Slice(Primes, 3)); // first 3 elements