2015-11-16 206 views
-1

我试图从数组中删除项目。 阵列不是动态的!从静态数组中删除元素

我发现了很多关于如何为动态变量而不是静态变量的例子。距离Delphi

例如:

var 
    A: array of integer; 
begin 
    ... 
    A:=[1,2,3,4]; 
    Delete(A,1,2); //A will become [1,4] 
    ... 
end; 

例如从另一个网站:

type 
    TIntArray = array of Integer; 
procedure DeleteArrayElement(var AArray: TIntArray; const AIndex: Integer); 
begin 
    Move(AArray[AIndex + 1], AArray[AIndex], SizeOf(AArray[0]) * (Length(AArray) - AIndex - 1)); 
    SetLength(AArray, Length(AArray) - 1); 
end; 
... 
//call via 
DeleteArrayElement(IntArray, 3); 
... 

我的阵列被定义为0 .. 11,所以这是不动态(ⅰ猜)?

当我尝试使用SetLength函数它说不兼容的类型。

任何想法如何解决这个问题?

+1

如果要删除元素,请不要使用数组:使用TList 如果可用 – fantaghirocco

+4

您无法从静态数组中删除/删除元素。这就是静态的意思:元素的数量是固定的。您只能更改或重新排列这些值。 –

+3

静态数组是静态的。 –

回答

3

当你声明一个静态数组时,你告诉编译器整个数组的内存应该被分配和保留,直到程序终止(如果在全局空间中被分配)。您不能更改静态数组的大小。这就是为什么Delphi中有动态数组的原因。

静态数组Embarcadero的文件说:

如果您创建一个静态数组,但不指定值,其所有 元素,未使用的元素仍分配并包含随机 数据;它们就像未初始化的变量。

+0

是否有可能让我们说从数组中取出最后一项并用0填充它,如果数组填充0而不显示它,则在一些函数中添加另一个检查? – vpe27339

+0

用零填充最后一项 - >'MyArray [Length(MyArray) - 1]:= 0'。然后在另一个函数中检查这个条件'if MyArray [Length(MyArray) - 1] = 0 then' –

+0

请参阅@fantaghirocco的评论。请听他的建议。这是做你正在尝试做的事情的正确和新颖的方式。 –