delphi - 动态数组作为 delphi/pascal 对象中的类型
问题描述
我有一个单元,其中有多个变量必须是相同大小的向量。
但是在我解析文件之前我不知道这个数组的长度。
所以我想要一个对整个单元来说是“全局”的动态数组,然后我可以
下面的代码显示了问题以及我现在拥有的解决方案。我现在的解决方案是将最大值分配为数组的长度。
unit xyz;
interface
uses
abc
const
maxval=50;
type
vectorofdouble = [1...maxval] of double; // I want to change this to dynamic array
type
T_xyz = object
public
NP: integer;
private
var1: vectorofdouble;
var2: vectorofdouble;
public
number: integer;
var3: vectorofdouble;
private
procedure Create();
function func1(etc): integer;
public
procedure ReadFile(const FileName, inputs: string);
end;
implementation
procedure T_xyz.ReadFile();
////////
Read(F,np)
//SetLength(vectorofdouble, np) // DOES NOT WORK
for i := 0 to maxval // I DONT WANT TO LOOP UP TO MAXVAL
begin
var1[i] := 0
end;
procedure T_xyz.func1(etc);
////////
do stuff
for i := 0 to maxval // I DONT WANT TO LOOP UP TO MAXVAL
begin
var2[i] := 0
end;
end;
end.
解决方案
array of <Type>
代替
array[<Low>..<High>] of <Type>
然后SetLength()
就可以了,但是您需要将动态数组变量而不是type传递给它。
尝试这个:
unit xyz;
interface
uses
abc;
type
vectorofdouble = array of double;
type
T_xyz = object
public
NP: integer;
private
var1: vectorofdouble;
var2: vectorofdouble;
public
number: integer;
var3: vectorofdouble;
private
procedure Create();
function func1(etc): integer;
public
procedure ReadFile(const FileName, inputs: string);
end;
implementation
procedure T_xyz.ReadFile();
var
i: integer;
begin
Read(F, NP);
SetLength(var1, NP);
for i := 0 to NP-1 do
begin
var1[i] := 0;
end;
end;
procedure T_xyz.func1(etc);
begin
for i := Low(var2) to High(var2) do
begin
var2[i] := 0;
end;
end;
end.
推荐阅读
- postgresql - 得到一个错误 ERROR: schema ":schema" does not exist while select nextval of seq
- spring-batch - 春季批处理作业如何知道其已完成并在启动作业时收到通知
- ajax - 在 DataTables JQuery 启动 ASP NET 之前显示模式
- c++ - 如何高效地使用和处理 GPU 中的 AVRO 数据?
- python - 在 Keras 中为加权损失传递可训练参数,同时使用生成器作为输入
- python - Flask:参数错误 - devices() 没有参数(给定 3 个)
- python - 方程中 x 值的迭代
- sql - 为什么在 WHERE 子句中使用 NVL (Oracle)
- java - 为什么这个 apache camel rest 配置允许除 json 之外的其他媒体类型,即使配置为仅使用 jsons?
- amazon-web-services - 指向私有子网的弹性负载均衡器