什么需要在多维动态数组中完成?

J__*_*J__ 2 arrays delphi

我使用动态数组很多,并且SetLength和Finalize程序没有问题.

我最近有理由使用动态数组,其中每个数组元素本身可以包含可变数量的元素.声明是这样的:

TScheduleArray =  array of array of array [1..DaysPerWeek] of TShiftType;
Run Code Online (Sandbox Code Playgroud)

该软件工作正常,我没有遇到如何使用这种结构的问题.在主数组上调用SetLength,然后可以在每个数组元素上再次调用SetLength.这是按预期工作的.

SetLength(MyArray, 1);
SetLength(MyArray[0], 2);
Run Code Online (Sandbox Code Playgroud)

我的问题是:当我来释放用于此数组的资源时,我是否只是在数组变量上调用Finalize:

Finalize(MyArray);
Run Code Online (Sandbox Code Playgroud)

或者每个数组元素是否也需要Finalize d,因为每个元素本身就是一个动态数组?

Wou*_*ick 6

Quote: "你在主数组 上调用SetLength,然后可以在 每个数组元素上再次调用SetLength ."

你真的不必遍历你的数组.

SetLength() 接受每个维度的长度列表.

例:

SetLength(ScheduleArray,200,15,35);
Run Code Online (Sandbox Code Playgroud)

是相同的:

SetLength(ScheduleArray,200);
for i:=low(ScheduleArray) to high(ScheduleArry) do
begin
  SetLength(ScheduleArray[i],15);
  for j:=low(ScheduleArray[i]) to high(ScheduleArray[i]) do
    SetLength(ScheduleArray[i,j],35);
end;
Run Code Online (Sandbox Code Playgroud)


Mas*_*ler 5

数组由编译器管理,无需最终确定.如果TShiftType是一个类,则必须手动释放对象,一次一个,但是当数组超出范围时,数组本身将被正确处理掉.