我有一个数组声明:有没有简单的方法来克隆字符串数组?
const A: array[0..3] of ShortString = (
'Customer',
'Supplier',
'Stock',
'GL'
);
var B: array of ShortString;
我想字符串数组克隆到另一个阵列B.使用移动或复制功能不起作用。有没有一种快速简便的方法来克隆数组而不使用for循环?
我有一个数组声明:有没有简单的方法来克隆字符串数组?
const A: array[0..3] of ShortString = (
'Customer',
'Supplier',
'Stock',
'GL'
);
var B: array of ShortString;
我想字符串数组克隆到另一个阵列B.使用移动或复制功能不起作用。有没有一种快速简便的方法来克隆数组而不使用for循环?
您面临的问题是您的常量A和您的变量B实际上是不同的类型。
type
TSA = array[0..3] of ShortString;
const
A: TSA = (
'Customer',
'Supplier',
'Stock',
'GL');
var B: TSA;
有了这些声明,那么你可以简单的写:这可以通过向您展示如何声明的方式相当于一个const和相同类型的变种向您展示在你的问题是什么最容易被证明
B := A;
但当甲是一个尺寸的阵列和乙是一个动态数组,这是不可能的,只能选择到SetLength(B)根据需要并复制元件一个接-一。
虽然常量和VAR类型可能看起来像它们是相同的 - 或兼容类型 - 它们都没有了,这便是没有从试图分配整数不变的字符串不同变量...即使你知道实现它所需的简单转换,编译器不能推测你打算这样做,所以你必须明确并自己提供转换代码。
喜欢的东西:
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。
谢谢。但是我想知道如果没有使用for循环的话。 – 2010-02-03 06:58:28
我不认为没有循环就可以完成。你为什么不做循环呢? – 2010-02-03 07:03:57
在上例中,您可以使用Move(Source,Dest [0],Length(Source)* SizeOf(ShortString))来代替for循环 – kludg 2010-02-03 09:05:00