从静态数组中删除元素

时间:2015-11-16 09:47:00

标签: arrays delphi pascal

我正在尝试从数组中删除项目。 阵列不是动态的!

我找到了很多关于如何为动态变体做这个例子的例子,但没有关于静态变量的例子。

来自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 个答案:

答案 0 :(得分:5)

当您声明一个静态数组时,您告诉编译器应该分配和保留整个数组的内存,直到程序终止(如果在全局空间中分配)。

您无法更改静态数组的大小。这就是为什么动态数组存在于Delphi中的目的。

静态数组的Embarcadero文档说:

  

如果您创建静态数组但不为其全部值分配值   元素,未使用的元素仍然被分配并包含随机   数据;它们就像未初始化的变量。