我想将多维数组传递给构造函数,如下所示:
constructor TMyClass.Create(MyParameter: array of array of Integer);
begin
LocalField := MyParameter;
end;
其中LocalField是一个Integer数组的数组。
但是上面的代码不会编译('预期标识符但发现ARRAY')。有人可以向我解释为什么这是错的吗?我试着阅读开放的,静态的和动态的数组,但还没有找到有用的东西。有没有办法在不改变LocalField类型的情况下修复它?
答案 0 :(得分:14)
为localfield创建一个特定类型,然后将其设置为MyParameter的类型,类似于:
type
TTheArray = array[1..5] of array[1..10] of Integer;
var
LocalField: TTheArray;
constructor TMyClass.Create(MyParameter: TTheArray);
...
(注意:未在编译器中验证,可能存在轻微错误)
请注意,大多数情况下,类似pascal的语法中,多维数组更适合声明为
type
TTheArray = array[1..5, 1..10] of Integer;
当然,除非你有其他理由这样做。
答案 1 :(得分:1)
我手头没有德尔福,但我认为这应该有效:
type
TIntArray = array of Integer;
...
constructor TMyClass.Create (MyParameter : array of TIntArray);
begin
...
end;
答案 2 :(得分:1)
如果在答案中建议使用之前的类型,请注意您将其作为参考传递,请参阅:
Precompile fails when adding ng-bootstrap to an Angular-CLI project
答案 3 :(得分:0)
我更喜欢这个
procedure MakeMat(var c: TMatrix; nr, nc: integer; a: array of double);
var
i, j: integer;
begin
SetLength(c, nr, nc);
for i := 0 to nr-1 do
for j := 0 to nc-1 do
c[i,j] := a[i*nc + j];
end;
MakeMat(ya, 5, 11,
[1.53,1.38,1.29,1.18,1.06,1.00,1.00,1.06,1.12,1.16,1.18,
0.57,0.52,0.48,0.44,0.40,0.39,0.39,0.40,0.42,0.43,0.44,
0.27,0.25,0.23,0.21,0.19,0.18,0.18,0.19,0.20,0.21,0.21,
0.22,0.20,0.19,0.17,0.15,0.14,0.14,0.15,0.16,0.17,0.17,
0.20,0.18,0.16,0.15,0.14,0.13,0.13,0.14,0.14,0.15,0.15]);