我在delphi中使用多维动态数组,并试图解决这个问题: 我有第一个索引和第二个索引的2个单独值,它们彼此完全分开. 当新值出现时,如果新值超出任何一个范围,我想增长数组. 对于新值
我有第一个索引和第二个索引的2个单独值,它们彼此完全分开.
当新值出现时,如果新值超出任何一个范围,我想增长数组.
对于新值x,y
我查了一下:
if Length(List) < (x + 1) then SetLength(List, x + 1); if Length(List[0]) < (y + 1) then SetLength(List, Length(List), y + 1);
这是正确的方法吗?还是有更好的方法来根据需要增长数组?
我想你忘了在第二维上使用第二个索引;您的代码可能应该如下所示:
if Length(List) < (x + 1) then SetLength(List, x + 1); if Length(List[x]) < (y + 1) then SetLength(List[x], y + 1);
注意在增长第二维时使用’x’作为第一维索引.
但有一点需要注意:
您应该意识到Delphi也在动态数组上使用引用计数(就像使用AnsiString一样).
因此,像上面这样增长数组会起作用,但对它的任何其他引用仍然会有它的旧副本!
解决这个问题的唯一方法是使用一个额外的间接级别来跟踪这些数组 – 即. :使用指向动态数组的指针(它本身也是一个指针,但没关系).
另请注意,任何这些“外部”指针都应该在动态数组地址可能发生变化的任何情况下进行更新,如使用SetLength()进行增长/缩小时.