2010-11-01 93 views

回答

42

试试这个

Const 
Elements =3; 
MyArray : array [1..Elements] of string = ('element 1','element 2','element 3'); 
+0

感谢,thow我是跳频避免使用元素,让德尔福计算数组的大小。 – none 2010-11-01 15:54:26

+4

您可以避免元素不变,但您必须声明数组的大小。您可以使用“short form”数组[x],其中x是一个枚举类型,从该类型的第一个元素到最后一个元素创建一个数组。编译器不支持array [] =(1,2,3)计算数组大小并自动设置0..2边界。 – 2010-11-02 11:10:55

+0

辉煌,所有这一次,我认为这是不可能的:D – 2015-02-05 03:18:20

14

您可以使用动态数组,并尝试这个办法:

var 
    FMyArray: TArray<string>; 

function MyArray: TArray<string>; 
begin 
    if Length(FMyArray) = 0 then 
    FMyArray := TArray<string>.Create('One', 'Two', 'Three'); 
    Result := FMyArray; 
end; 

虽然这并做一个动态数组的运行时初始化堆上,它还显示Delphi支持动态数组上的“伪构造函数”,允许就地初始化。 (注意:上面的代码不是线程安全的)。

现在您只需要使用Length()标准函数或查找允许的索引范围,就可以使用Low()和High()标准函数来查找数组长度。

如果您使用德尔福的旧版本,用自己的动态数组string类型取代在tarray如:

type 
    TStringArray = array of string; 
+0

是真的,这是有效的,但它需要是const,而不是运行时。 – none 2010-11-02 11:06:10

+0

元素是恒定的,只有数组不是。除了启动成本之外,运行时开销很小。它是仅仅因为传统而需要是const还是需要const的特定于你的情况的东西? – 2010-11-02 16:05:03

+3

如果数组不是常量,那么数组可能会改变。不符合要求。这个想法是不错的寿。 – none 2010-11-03 11:52:11

32

在XE7你可以声明动态数组常量是这样的:

const 
    MyArray: TArray<String> = ['First','Second','Third']; 
+5

这是一个漂亮的功能。几乎让我想升级! – 2014-11-11 15:56:00

+0

这节省了我的一天。谢谢。 – Eduardo 2017-07-26 21:54:05

0

您可以间接的方式做到这一点。创建这样一个功能:

procedure assignStringArray(var rasVelden: ArrayOfString; const asVeldenIn: Array Of String); 
var 
    iLengte, iT1: Integer; 
begin 
    iLengte := Length(asVeldenIn); 
    SetLength(rasVelden, iLengte); 
    for iT1 := iLengte-1 downto 0 do 
     rasVelden[iT1] := asVeldenIn[iT1]; 
end; 

,并调用这个函数,如:

assignStringArray(asVelden, ['String1', 'String2', 'String3']); 

其中:

asVelden: ArrayOfString; 
相关问题