2017-02-11 71 views
2

如何在不创建/定义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 

感谢。

+0

我只是想知道为什么要在这里使用泛型? –

+1

您应该始终使用动态数组的通用形式,因为它提供了与其他通用代码的兼容性。例外是,如果你必须支持没有泛型的旧版编译器。 –

+2

@AntonDuzenko,泛型动态数组放宽了类型标识规则。参见[使用TArray 而不是Array of T?]的原因是什么(http://stackoverflow.com/q/14383093/576719)。 –

回答

7

使用SetLength

SetLength(IntA, N); 

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

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

对于动态数组变量,SetLength再分配s引用到给定长度的阵列。数组中的现有元素被保留,新分配的空间被设置为0或nil。对于多维动态数组,SetLength可能需要多个长度参数(直到数组维数)。

+0

完美的工作 - 非常感谢你。 –

相关问题