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