从静态数组中删除元素
Delete element from a static array
我正在尝试从数组中删除一个项目。
该数组不是动态的!
我找到了很多关于如何为动态变体做这件事的例子,但 none 对于静态变体。
示例来自 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 函数时,它说类型不兼容。
知道如何解决这个问题吗?
当你声明一个静态数组时,你告诉编译器整个数组的内存应该被分配并保留直到程序终止(如果在全局space中分配)。
您不能更改静态数组的大小。这就是 Delphi.
中存在动态数组的目的
静态数组的 Embarcadero 文档说:
If you create a static array but don't assign values to all its
elements, the unused elements are still allocated and contain random
data; they are like uninitialized variables.
我正在尝试从数组中删除一个项目。 该数组不是动态的!
我找到了很多关于如何为动态变体做这件事的例子,但 none 对于静态变体。
示例来自 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 函数时,它说类型不兼容。
知道如何解决这个问题吗?
当你声明一个静态数组时,你告诉编译器整个数组的内存应该被分配并保留直到程序终止(如果在全局space中分配)。
您不能更改静态数组的大小。这就是 Delphi.
中存在动态数组的目的静态数组的 Embarcadero 文档说:
If you create a static array but don't assign values to all its elements, the unused elements are still allocated and contain random data; they are like uninitialized variables.