我有两个或更多动态字符串数组,其中填充了一些庞大的数据。我想将这两个数组合并成一个数组,我知道可以用for循环来实现,代码如下:
var
Arr1, Arr2, MergedArr: Array of string;
I: Integer;
begin
// Arr1:= 5000000 records
// Arr2:= 5000000 records
// Fill MergedArr by Arr1
MergedArr:= Arr1;
// Set length of MergedArr to length of ( Arra1 + Arr2 )+ 2
SetLength(MergedArr, High(Arr1)+ High(Arr2)+2);
// Add Arr2 to MergedArr
for I := Low(Arr2)+1 to High(Arr2)+1 do
MergedArr[High(Arr1)+ i]:= Arr2[i-1];
end;
但是在处理大量数据时速度很慢,是否有更快的方法,比如复制数组内存数据?
SetLength(MergedArr, High(Arr1) + High(Arr2) + 2);
等同于SetLength(MergedArr, Length(Arr1) + Length(Arr2));
。High(Arr)
返回Arr
的最后一个索引,而Length(Arr)
返回其元素数量。 - Andriy ML1 := length(Arr1)
):这样代码会更易读且更快。你使用的是哪个 Delphi 版本?旧版本使用较慢的内存管理器。如果你使用的是 Delphi 7 等版本,请尝试将 FastMM4 添加到你的 use 子句中。 - Arnaud Bouchez