【问题标题】:How to simplify creating an unpopulated array of integers如何简化创建未填充的整数数组
【发布时间】:2017-06-29 17:29:32
【问题描述】:

如何在不创建/定义 x 整数的情况下创建 x 整数数组。此示例将创建一个 10 整数数组(在每个元素中预先填充零):

 var
   IntArray : TArray<Integer>;
 begin
   IntArray := TArray<Integer>.Create(0,0,0,0,0,0,0,0,0,0);
 end;

所以我创建了一个长度为 120 个整数的整数数组,它开始看起来很乱:

IntA := TArray<Integer>.Create(
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0);

现在我需要创建一个包含 9000 个整数的数组,我不需要(或不想)用 9000 个零预填充数组。

有没有类似的命令:

IntA := TArray<Integer>.Array[0..9000]; //This doesn't work

谢谢。

【问题讨论】:

  • 我只是想知道为什么在这里使用泛型?
  • 您应该始终使用动态数组的泛型形式,因为它提供与其他泛型代码的兼容性。如果您必须支持没有泛型的旧编译器,则例外情况。
  • @AntonDuzenko,通用动态数组具有宽松的类型标识规则。见What are the reasons to use TArray<T> instead of Array of T?

标签: delphi


【解决方案1】:

使用SetLength:

SetLength(IntA, N);

其中N 是您希望分配的数组的长度。

procedure SetLength(var S: <string or dynamic array>; NewLength: Integer);

对于动态数组变量,SetLength 将 S 引用的数组重新分配给给定的长度。保留数组中的现有元素,并将新分配的空间设置为 0 或 nil。对于多维动态数组,SetLength 可以带多个长度参数(最多为数组维数)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多