怎样动态建立数组[在线等](50分)

  • 主题发起人 主题发起人 乖乖小妹
  • 开始时间 开始时间

乖乖小妹

Unregistered / Unconfirmed
GUEST, unregistred user!
可以在程序中创建数组吗?不是设定数组长度而是直接创建数组
因为在程序运行时,可能需要很多个数组,而这些数组的个数是不能确定的,不知道在程序中能不能创建?如果不能得花可以动态设定多维数组吗?可以的话又要怎么做呢?
 
例子如下:
procedure TfmMain.btn1Click(Sender: TObject);
var
arySome: array of Integer;
I: Integer;
begin
inherited;
SetLength(arySome,20);
for I := 0 to 19 do
arySome := I;
end;
arySome为建立的动态数组。
注意动态建立的数组都要用SetLength函数来建立数组的长度(例如,本例设置arySome的长度为20,也就是说数组arySome可以容纳20个整型的变量),并且动态建立的数组的下标都是从0开始的,而且其最大下标为数组长度-1(注意使用时防止用数组长度最为下标来访问而触发访问越界异常)。
 
定义
Str1: array of integer;
设置长度
setlength(Str1, 10);

注意: delphi好像没有类似VB中redim方法对已有数值的保留功能

其他相关可参考帮助[:D]
 
var
begin
在这个地方可以创建数组吗?(而不是在一开始var中就定义数组)
end;

因为数据组数是未知的,我又想把每个数据组里的数据放在一个数组里,所以需要定义的数组数是未知的,所以想问在程序中可以定义数组吗?
 
var
S1,S2: array of integer;
i,j:integer;
begin
setlength(S1, 10);
setlength(S2, Length(S1));
for i := Low(S1) to High(S1) do
begin
S1 :=1;
end;
for j := Low(S2) to High(S2) do
begin
S2[j] :=S1[j];
end;
end;
 
对啊!
procedure TfmMain.btn1Click(Sender: TObject);
var
arySome: array of Integer;
I: Integer;
begin
inherited;
SetLength(arySome,20);
for I := 0 to 19 do
arySome := I;
end;

...
var
arySome: array of Integer;
I: Integer;
...
部分定义的数组数据组数就是未知的啊!没有写明是多少组啊,实绩的组数是在begin和end之间动态定义的啊,你没有看清出!要是数据类型也不知道的话就用Variant类型定义,形式如下:
...
var
arySome: array of Variant;
...
 
我的意思是如果我要有两组数呢,我就用data0,data1分别定义,即
var
data0: array of string;
data1: array of string;
begin
setlength(data0,4);
setlength(data1,4);
end;
但是我不知道我有多少组数据,因而我可能是data0,data1..datan,所以呢我没有办法在一开始就把这些都做定义,我是想在程序中创建data0之类的数组。例如
var
begin
vararraycreat();//在这个里面创建data0这个数组,这个函数是在帮助中找到的,不知道能不能实现我要的,也不知道这个函数怎么使用。
end;
 
看来你只能把数组封装成一个类, 就可以实现你的功能了!
要不然真的没有象你说的那样的数动态创建的. 至少我不懂!!
 
2个方法解决之
1使用TList类型 保存你这些data0,data1..datan的首地址 这样你每个数组的元素可以
自己定义

2再定义动态数组
一般有 array of array of Integer 这样的结构
但一般推荐定义为
var MyArray: array[1..100] of Char;
var MyArray2: array of MyArray;

这样你的MyArray首先要确定元素的个数

如果确定不了 还是用链表开存储吧 具体参见delphi自带的帮助
 
嗯,现在明白你的意思了。
对,楼上说的方法可以,个人推荐使用方法2。
 
只能用Variant了,VarArrayCreate可创建Variant数组,但是用起来不方便,而且效率低,建议用动态数组。
 
明白了,多谢
 
后退
顶部