首页 > 解决方案 > 如何最好地将记录添加到 TArray

问题描述

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

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() 来更改实际数组的长度。为什么这个示例的作者创建了一个临时数组,然后将所有值分配给它并将其复制回原始数组?这是有充分理由的,还是他只是很奇怪?

标签: delphi

解决方案


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

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

推荐阅读