如何切片动态数组?

use*_*855 4 delphi delphi-xe6

如何将动态数组切片到多个子数组?Slice()Delphi中的函数不支持动态数组.那怎么办呢?欢迎使用通用解决方案.

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.
Run Code Online (Sandbox Code Playgroud)

Dan*_*iel 6

Copy(A, 0, 2)而不是Slice(A, 2).

关键是你需要一个"开放数组参数"(在这种情况下你需要Slice)或者你需要一个常规数组,在这种情况下Copy将提供一个很好的解决方案.

  • 至于“Slice()”的动态数组的“开放数组参数”建议,您必须使用类型转换才能使其工作。请参阅 [切片不适用于动态数组](http://qc.embarcadero.com/wc/qcmain.aspx?d=4669)。或者查看这篇文章,[通过引用开始和长度说明符传递静态/动态数组的切片](http://stackoverflow.com/a/15993429/576719),以获取也提供偏移可能性的解决方案。 (2认同)