有没有一种简单的方法来克隆字符串数组?

时间:2010-02-03 06:54:18

标签: delphi arrays

我有一个声明为:

的数组
const A: array[0..3] of ShortString = (
  'Customer',
  'Supplier',
  'Stock',
  'GL'
);

var B: array of ShortString;

我想将字符串数组A克隆到另一个数组B.使用移动或复制功能不起作用。有没有使用for循环克隆数组的快速简便方法?

2 个答案:

答案 0 :(得分:11)

您面临的问题是,您的常量 A 和您的变量 B 实际上是不同类型的。通过展示如何以与您在问题中显示的方式相同的方式声明const和相同类型的var,可以最容易地证明这一点:

type
  TSA = array[0..3] of ShortString;

const
  A: TSA = (
  'Customer',
  'Supplier',
  'Stock',
  'GL');

var B: TSA;

通过这些声明,您可以简单地写:

B := A;

但是当 A 是尺寸数组且 B 是动态数组时,这是不可能的,您唯一的选择是 SetLength(B)< / em>根据需要逐个复制元素。

虽然 const var 类型看起来可能相同 - 或兼容类型 - 但它们不是,这与尝试分配没有什么不同字符串变量的整数常量...即使知道实现它所需的简单转换,编译器也无法猜测你打算这样做,所以你必须明确并自己提供转换代码。

答案 1 :(得分:2)

类似的东西:

SetLength(B, Length(A));
for i := Low(A) to High(A) do
  B[i] := A[i];

或者以更通用的方式:

type
  TStringArray = array of ShortString;

procedure CloneArray(const source: array of ShortString; var dest: TStringArray);
var
  i: integer;
begin
  SetLength(dest, Length(source));
  for i := Low(source) to High(source) do
    dest[i] := source[i];
end;

在后一种情况下,您必须将B重新声明为B:TStringArray。