Есть ли у Free Pascal способ объединять массивы? - PullRequest
1 голос
/ 18 октября 2011

Паскаль, очевидно, имеет конкатенацию строк, но имеет ли он общую конкатенацию для любого типа массива?

Ответы [ 2 ]

1 голос
/ 24 октября 2011

Это не так, но вы можете сделать свою собственную функцию, я закодировал это за 5 минут ... Я уверен, что есть лучший метод, но у меня нет никакой идеи прямо сейчас.

type
 TBArray = array of byte;  

function ConcArray(arr1,arr2:TBArray):TBArray;
begin
    SetLength(Result,Length(arr1) + Length(arr2));
    ZeroMemory(@Result[0],Length(arr1) + Length(arr2));
    CopyMemory(@Result[0],@arr1[0],Length(arr1));
    CopyMemory(@Result[Length(arr1)],@arr2[0],Length(arr2));
end; 
0 голосов
/ 31 октября 2013

Как насчет этого? Если вам нужно объединить во многих местах, оператор + выглядит довольно хорошо, ИМХО.

  program ConCatTest;

  type
  SomeRec = record
      s: AnsiString;
      i: Longint;
  end;
  SomeArr = array of SomeRec;

    operator + (a, b: SomeArr) c: SomeArr;
    var
  i: Longint;
    begin
  SetLength(c, Length(a) + Length(b));
  for i := 0 to High(a) do
      c[i] := a[i];
  for i := 0 to High(b) do
      c[i + Length(a)] := b[i];
    end;

    var
  a1, a2, a3: SomeArr;
  i: Longint;
    begin
  SetLength(a1, 3);
  SetLength(a2, 2);
  a1[0].s := 'a';
  a1[0].i := 0;
  a1[1].s := 'a';
  a1[1].i := 1;
  a1[2].s := 'a';
  a1[2].i := 2;
  a2[0].s := 'b';
  a2[0].i := 0;
  a2[1].s := 'b';
  a2[1].i := 1;

  a3 := a1 + a2;

  for i := 0 to High(a3) do
      WriteLn(a3[i].s, a3[i].i);
  ReadLn;
  end.
...