## 05 November 2010

### Concatenating Dynamic Arrays

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;```
Here is the implementation:
```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: