创建一个常量字符串数组

non*_*one 38 arrays delphi const

Delphi中是否有一种方法可以声明一个字符串数组,例如跟随一个字符串?

{'first','second','third'}
Run Code Online (Sandbox Code Playgroud)

RRU*_*RUZ 48

试试这个

Const
Elements =3;
MyArray  : array  [1..Elements] of string = ('element 1','element 2','element 3');
Run Code Online (Sandbox Code Playgroud)

  • 您可以避免使用Elements常量,但无论如何都必须声明数组大小.您可以使用"short form"数组[x],其中x是枚举类型,从类型的第一个元素到最后一个元素创建一个数组.编译器不支持array [] =(1,2,3)计算数组大小并自动设置0..2边界. (4认同)
  • 谢谢,因此我希望避免使用Elements,而是让Delphi计算数组的大小。 (2认同)

LU *_* RD 40

在XE7中,您可以声明一个动态数组常量,如下所示:

const
  MyArray: TArray<String> = ['First','Second','Third'];
Run Code Online (Sandbox Code Playgroud)

  • 这是一个漂亮的功能.差点让我想升级! (5认同)
  • 这挽救了我的一天。谢谢。 (4认同)
  • 我喜欢这个。它允许你做一个 forin 循环(对于 MyArray 中的 S 做) (3认同)

All*_*uer 16

您可以使用动态数组并尝试:

var
  FMyArray: TArray<string>;

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

虽然这确实对堆上的动态数组进行了运行时初始化,但它也表明Delphi支持动态数组上的"伪构造函数",允许就地初始化.(注意:上面的代码不是线程安全的).

现在您需要做的就是找出数组的长度,使用Length()标准函数,或者找到允许的索引范围,使用Low()和High()标准函数.

如果您使用的是旧版本的Delphi,请将TArray替换为您自己的动态数组字符串类型,例如:

type
  TStringArray = array of string;
Run Code Online (Sandbox Code Playgroud)

  • 如果数组不是const,那么数组可能会改变.不符合要求.这个想法很好. (3认同)