gpt4 book ai didi

delphi - 初始化一个常量,它是固定数组的动态数组?

转载 作者:行者123 更新时间:2023-12-03 14:44:40 26 4
gpt4 key购买 nike

我可以初始化一个常量动态数组数组吗?

如果:

type
tNamePair = array[1..2] of String;
tPairList = array of tNamePair;

如何创建一个初始化常量?我无法编译下面的代码:

const
PairList: tPairList = ( ('One', '1'),
('Two', '2'),
('Three', '3'));

如果不可能,可以用固定数组初始化常量固定数组吗:

 type
tPairList: array[1..3] of tNamePair;

如果不可能,可以用记录初始化常量动态数组吗:

tNamePair = record 
English: String;
Number: String;
end;
tPairList = array of tNamePair;

如果不可能,可以用记录初始化常量固定数组:

tNamePair = record 
English: String;
Number: String;
end;
tPairList = array[1..3] of tNamePair;

如果这是不可能的,除了代码中的硬接线分配之外的任何建议,坦率地说,这比撰写这个问题花费的时间更少!

最佳答案

在 XE7 之前,您无法创建动态数组常量。常量必须在编译时已知,但动态数组是在运行时分配的。

可以在编译时声明固定数组的固定数组:

type
tNamePair = array[1..2] of String;
tPairList = array[1..3] of tNamePair;

const
PairList: tPairList = ( ('One', '1'),
('Two', '2'),
('Three', '3'));

也可以在编译时声明固定记录数组:

type
tNamePair = record
English: String;
Number: String;
end;
tPairList = array[1..3] of tNamePair;

const
PairList: tPairList = ( (English: 'One'; Number: '1'),
(English: 'Two'; Number: '2'),
(English: 'Three'; Number: '3'));

如果您需要动态数组,则必须在运行时构造它。您可以直接构建它:

type
tNamePair = array[1..2] of String;
tPairList = array of tNamePair;

var
PairList: tPairList;

initialization
SetLength(PairList, 3);
PairList[0][1] := 'One';
PairList[0][2] := '1';
PairList[1][1] := 'Two';
PairList[1][2] := '2';
PairList[2][1] := 'Three';
PairList[2][2] := '3';
end.

或者您可以定义一个编译时常量固定数组并在运行时将其复制到动态数组中:

type
tNamePair = array[1..2] of String;
tPairList = array[1..3] of tNamePair;
tPairListDyn = array of tNamePair;

const
PairList: tPairList = ( ('One', '1'),
('Two', '2'),
('Three', '3'));

function MakePairListDyn(const Pairs: tPairList): tPairListDyn;
var
I, J: Integer;
begin
SetLength(Result, Length(Pairs));
J := 0;
for I := Low(Pairs) to High(Pairs) do begin
Result[J] := Pairs[I];
Inc(J);
end;
end;

var
Pairs: tPairListDyn;

initialization
Pairs := MakePairListDyn(PairList);
end.

XE7后的情况见@LURD's answer .

关于delphi - 初始化一个常量,它是固定数组的动态数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10525718/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com