如何最好地将记录添加到TArray

时间:2018-08-14 16:40:20

标签: delphi

在编写测试程序时,我遇到了以下示例代码:

var MyData: TArray<TDataRec>;

procedure AppendData(AItem: TOrderByCustomer);
var i: Integer;
  tmp: TArray<TOrderByCustomer>;
begin
  SetLength(tmp, Length(MyData)+1);
  for i:=0 to High(MyData) do
    tmp[i]:=MyData[i];

  tmp[Length(tmp)-1]:=AItem;
  MyData:=tmp;
end;

过去,我仅使用SetLength()来更改实际数组的长度。为什么此示例的作者创建了一个临时数组,然后将所有值分配给它,然后将其复制回原始数组?是有充分的理由吗?还是他只是很奇怪?

1 个答案:

答案 0 :(得分:5)

此代码没有充分的理由。它引入了不必要复制的潜在开销。该函数应这样写:

procedure AppendData(const AItem: TOrderByCustomer);
var
  N: Integer;
begin
  N := Length(MyData);
  SetLength(MyData, N + 1);
  MyData[N] := AItem;
end;