var abc :array of array of integer; setlength(abc,x,y); var abc :array of array of array of integer; setlength(abc,x,y,z);
谢谢,Delphi真是好东西。我查看了一下资料,说到可以通过 length(f) 得到动态数组 f 的长度。这样可以枚举他的每一个元素。 for i:=0 to length(f)-1 do begin //.... end; 但是没有谈到如何取得多维数组的某一维的长度,我这样用对吗?: length(f,0) 得到第0维的长度。
可以这样吗?var a: array of array of string; i: integer; begin SetLength(f,9); for i:=0 to length(f)-1 do begin //.... SetLength(a[i], i); end;
纠正: 可以这样吗?var a: array of array of string; i: integer; begin SetLength(a,9); for i:=0 to length(a)-1 do begin //.... SetLength(a[i], i); end;
不错哦,length真的可以用于数组哦 而且我测试了下可用性不错 下面程序加入memo1和button1两个控件,测试结果让人满意procedure TForm1.Button1Click(Sender: TObject); var a: array of array of byte; i,x: integer; begin SetLength(a,9); x:=20; for i:=0 to length(a)-1 do begin //.... if i<>4 then SetLength(a[i], i) else SetLength(a[i], x) end; a[4,19]:=100; for i:=0 to length(a)-1 do begin memo1.Lines.Add(inttostr(length(a[i]))); end; memo1.Lines.Add(inttostr(a[4,19])); end;
刚才看了delphi帮助length(s)这个s是ansistring 和dynamicArray In Delphi code, Length returns the number of characters actually used in the string or the number of elements in the array. In C++ code, use the method of the same name on the AnsiString or DynamicArray class.
很好, 更进一步。在自动化类型里的数组是用SafeArray来表示的。Delphi的这种动态数组到SafeArray的转换该怎么做? 我查阅了Delphi的文档,string 只要直接赋值到 Variant,他会帮助转换到 BSTR。 文档的示例: var V1, V2, V3, V4, V5: Variant; I: Integer; D: Double; S: string; begin V1 := 1; { integer value } V2 := 1234.5678; { real value } V3 := 'Hello world!'; { string value } V4 := '1000'; { string value } V5 := V1 + V2 + V4; { real value 2235.5678} I := V1; { I = 1 (integer value) } D := V2; { D = 1234.5678 (real value) } S := V3; { S = 'Hello world!' (string value) } I := V4; { I = 1000 (integer value) } S := V5; { S = '2235.5678' (string value) } end; 数组呢?也一样?
function ccc(a: array of array of string) : array of array of string; 出错了。悲惨啊,不能用数组做参数? 那如果我要传递一个数组怎么办,各位大哥,救救我吧。
原来并不是数组不能做参数。function ccc(a: array of string) : string;就能编译通过。
setlength 动态设置数组长度
var abc :array of array of array of integer; setlength(abc,x,y,z);
length(f)
得到动态数组 f 的长度。这样可以枚举他的每一个元素。
for i:=0 to length(f)-1 do
begin
//....
end;
但是没有谈到如何取得多维数组的某一维的长度,我这样用对吗?: length(f,0) 得到第0维的长度。
a: array of array of string;
i: integer;
begin
SetLength(f,9);
for i:=0 to length(f)-1 do
begin
//....
SetLength(a[i], i);
end;
可以这样吗?var
a: array of array of string;
i: integer;
begin
SetLength(a,9);
for i:=0 to length(a)-1 do
begin
//....
SetLength(a[i], i);
end;
Length(string)里面可以用数组的么Low(数组)上标
High数组)下标
而且我测试了下可用性不错
下面程序加入memo1和button1两个控件,测试结果让人满意procedure TForm1.Button1Click(Sender: TObject);
var
a: array of array of byte;
i,x: integer;
begin
SetLength(a,9);
x:=20;
for i:=0 to length(a)-1 do
begin
//....
if i<>4 then
SetLength(a[i], i)
else
SetLength(a[i], x) end;
a[4,19]:=100;
for i:=0 to length(a)-1 do
begin
memo1.Lines.Add(inttostr(length(a[i]))); end;
memo1.Lines.Add(inttostr(a[4,19]));
end;
In Delphi code, Length returns the number of characters actually used in the string or the number of elements in the array. In C++ code, use the method of the same name on the AnsiString or DynamicArray class.
更进一步。在自动化类型里的数组是用SafeArray来表示的。Delphi的这种动态数组到SafeArray的转换该怎么做?
我查阅了Delphi的文档,string 只要直接赋值到 Variant,他会帮助转换到 BSTR。
文档的示例:
var
V1, V2, V3, V4, V5: Variant;
I: Integer;
D: Double;
S: string;
begin
V1 := 1; { integer value }
V2 := 1234.5678; { real value }
V3 := 'Hello world!'; { string value }
V4 := '1000'; { string value }
V5 := V1 + V2 + V4; { real value 2235.5678}
I := V1; { I = 1 (integer value) }
D := V2; { D = 1234.5678 (real value) }
S := V3; { S = 'Hello world!' (string value) }
I := V4; { I = 1000 (integer value) }
S := V5; { S = '2235.5678' (string value) }
end;
数组呢?也一样?
出错了。悲惨啊,不能用数组做参数?
那如果我要传递一个数组怎么办,各位大哥,救救我吧。