Another day another unit test and another extension to my little `TArrayEx` class. This time I found myself having to concatenate some dynamic arrays. After solving the problem for the particular array type I decided to produce a generic solution. Here's the method I came up with:

type TArrayEx = class(TObject) public ... class function Concat<T>(const Arrays: array of TArray<T>): TArray<T>; ... end;

The method takes an array of the arrays you want to concatenate (don't forget the [] notation) and returns the concatenated array. Here's an example where the resultant array `A` contains the integers 1 to 10 in order:

var A, A1, A2, A3: TArray<Integer>; begin A1 := TArray<Integer>.Create(1, 2, 3); A2 := TArray<Integer>.Create(4, 5, 6); A3 := TArray<Integer>.Create(7, 8, 9, 10); A := TArrayEx.Concat<Integer>([A1, A2, A3]); ... end;

class function TArrayEx.Concat<T>(const Arrays: array of TArray<T>): TArray<T>; var A: TArray<T>; ResLen: Integer; ResIdx, Idx: Integer; begin ResLen := 0; for A in Arrays do Inc(ResLen, Length(A)); SetLength(Result, ResLen); ResIdx := 0; for A in Arrays do begin for Idx := Low(A) to High(A) do begin Result[ResIdx] := A[Idx]; Inc(ResIdx); end; end; end;

My other blogs about `TArrayEx` and working with dynamic arrays are: