我可以在不丢失以前内容的情况下调整Delphi数组的大小吗?

Him*_*dri 8 delphi dynamic-arrays

我有一个动态数组.但最初我不知道阵列的长度.我可以先做,我将它的长度设置为1,然后根据需要增加长度而不丢失以前存储的数据吗?
我知道我可以使用TList做这样的任务.但我想知道我是否可以用数组做到这一点?

Rob*_*ove 15

动态数组可以调整为更大的大小而不会丢失包含的数据.

以下程序演示了这一点.

program Project7;

{$APPTYPE CONSOLE}

uses
  SysUtils;
var
 A : Array of Integer;
 I : Integer;
begin
  for I := 0 to 19 do
  begin
    SetLength(A,I+1);
    A[I] := I;
  end;
  for I := Low(A) to High(A) do
  begin
    writeln(A[I]);
  end;
  readln;
end.
Run Code Online (Sandbox Code Playgroud)

  • 请注意,它可能是一个内存密集型操作,因为如果没有足够的空间将其扩展到分配位置,则可以移动整个数组.与列表不同,数组必须在contiguos内存块中分配.这就是列表(和其他容器)存在的原因.根据您的需要使用最好的容器. (10认同)
  • @ldsandon:小心:Delphi中的许多"列表"实现为数组或至少连续的内存块,其方式与"引擎盖下"的数组完全相同.TList,TObjectList,TStringList ......这些最常见的列表都是对象包装器内的有效数组.这些"数组"的"长度"比"实际"数组具有更灵活的管理工具,因为它们同时支持容量("数组"的大小)和Count(实际使用的元素数),因此您可以预先分配填充之前所需的连续内存(通过容量). (5认同)