我有一个声明为:
的数组const A: array[0..3] of ShortString = (
'Customer',
'Supplier',
'Stock',
'GL'
);
var B: array of ShortString;
我想将字符串数组A克隆到另一个数组B.使用移动或复制功能不起作用。有没有使用for循环克隆数组的快速简便方法?
答案 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。