我有一個數組聲明:有沒有簡單的方法來克隆字符串數組?
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