【发布时间】:2014-08-15 17:46:53
【问题描述】:
如何将一个动态数组分割成多个子数组? Delphi 中的Slice() 函数不支持动态数组。那么怎么做呢?欢迎使用通用解决方案。
program Project10;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
var
A: Array of Integer;
begin
SetLength(A, 4);
Slice(A, 2); // [dcc32 Error] Project10.dpr(15): E2193 Slice standard function only allowed as open array argument
end.
【问题讨论】:
-
来自文档 (docwiki.embarcadero.com/Libraries/en/System.Slice):仅允许在调用需要开放数组参数的过程或函数时将切片作为参数。
-
@user246408 最好使用
Move而不是 Copy。 -
如果您使用的是 Move,您需要已经分配的内存才能移动到托管类型并正确处理。 Copy 会为您完成所有这些工作,因为它在内部调用
_DynArrayCopy。 -
@StefanGlienke 你可以在原始数组上调用
FillChar。 -
然后你突然意识到你原来的数组都是空的。 FillChar 也不是您所要求的通用,因为您需要考虑数组的元素类型来传递要填充的字节数。复制完成所有这些。
标签: delphi delphi-xe6