从静态数组中删除元素

vpe*_*339 0 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;
Run Code Online (Sandbox Code Playgroud)

另一个站点的示例:

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);
...
Run Code Online (Sandbox Code Playgroud)

我的数组定义为0 .. 11,所以这不是动态的(我猜)?

当我尝试使用SetLength函数时,它表示不兼容的类型。

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

Cha*_*lie 5

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

您不能更改静态数组的大小。这就是为什么在Delphi中使用动态数组的目的。

静态数组的Embarcadero文档说:

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

  • @CharlieH:而不是_Length(MyArray)-1_,请使用_HIGH(MyArray)_-这也将允许您拥有_ARRAY [7..9] _并仍然访问最后一个条目,而Length将给您提供索引错误。 。 (2认同)