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:

Comments

Anonymous said…
Hi, under what license is the code on this blog licensed? I know there is some sort of license on the code in the Code Snippet Repository, but I cannot find this implementation of the routine there.

Thanks for the blog post
Delphidabbler said…
This is just example code, so feel free to do want with it.

I have a draft TArray class that I intended to add to the Code Snippets database, but never got round to. If it ever gets released that code, like everything in the database, will be MIT licensed.

Popular posts from this blog

New Unit2NS Application Released in Beta

Embarcadero Announce RAD Studio 11 Is Coming

Some Features of the Upcoming Delphi 11 (probably)