数组 – 如何在Delphi中合并2个字符串数组

前端之家收集整理的这篇文章主要介绍了数组 – 如何在Delphi中合并2个字符串数组前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有2个或更多的动态字符串数组填充一些巨大的数据,我想将这个2数组合并到一个数组,我知道我可以用一个for循环这样做:
  1. var
  2. Arr1,Arr2,MergedArr: Array of string;
  3. I: Integer;
  4. begin
  5. // Arr1:= 5000000 records
  6. // Arr2:= 5000000 records
  7.  
  8. // Fill MergedArr by Arr1
  9. MergedArr:= Arr1;
  10.  
  11. // Set length of MergedArr to length of ( Arra1 + Arr2 )+ 2
  12. SetLength(MergedArr,High(Arr1)+ High(Arr2)+2);
  13.  
  14. // Add Arr2 to MergedArr
  15. for I := Low(Arr2)+1 to High(Arr2)+1 do
  16. MergedArr[High(Arr1)+ i]:= Arr2[i-1];
  17. end;

但是在巨大的数据上是缓慢的,是否有更快的方式像复制数组内存数据?

解决方法

您可以使用内置的Move功能将内存块移动到另一个位置.参数是源和目标内存块和要移动的数据的大小.

由于您正在复制字符串,源数组在合并后必须通过将其填充为零来销毁.否则,对于字符串的引用将会在程序中造成破坏和破坏.

  1. var
  2. Arr1,MergedArr: Array of string;
  3. I: Integer;
  4. begin
  5. SetLength(Arr1,5000000);
  6. for I := Low(Arr1) to High(Arr1) do
  7. Arr1[I] := IntToStr(I);
  8.  
  9. SetLength(Arr2,5000000);
  10. for I := Low(Arr2) to High(Arr2) do
  11. Arr2[I] := IntToStr(I);
  12.  
  13. // Set length of MergedArr to length of ( Arra1 + Arr2 )+ 2
  14. SetLength(MergedArr,High(Arr1)+ High(Arr2)+2);
  15.  
  16. // Add Arr1 to MergedArr
  17. Move(Arr1[Low(Arr1)],MergedArr[Low(MergedArr)],Length(Arr1)*SizeOf(Arr1[0]));
  18.  
  19. // Add Arr2 to MergedArr
  20. Move(Arr2[Low(Arr2)],MergedArr[High(Arr1)+1],Length(Arr2)*SizeOf(Arr2[0]));
  21.  
  22. // Cleanup Arr1 and Arr2 without touching string refcount.
  23. FillChar(Arr1[Low(Arr1)],Length(Arr1)*SizeOf(Arr1[0]),0);
  24. FillChar(Arr2[Low(Arr2)],Length(Arr2)*SizeOf(Arr2[0]),0);
  25.  
  26. // Test
  27. for I := Low(Arr1) to High(Arr1) do begin
  28. Assert(MergedArr[I] = IntToStr(I));
  29. Assert(MergedArr[I] = MergedArr[Length(Arr1) + I]);
  30. end;
  31.  
  32. // Clear the array to see if something is wrong with refcounts
  33. for I := Low(MergedArr) to High(MergedArr) do
  34. MergedArr[I] := '';
  35. end;

猜你在找的Delphi相关文章