动态循环,个数可变的for语句 VCL组件开发及应用http://www.delphi2007.net/DelphiVCL/html/delphi_20061223173939163.html
比如说:
iArr: array of Integer; //长度可变
//---------------------------------------------
//假如长度为3:
iArr[0] := 4;
iArr[1] := 5;
iArr[2] := 6;
for i := 0 to 4 do begin
for j := 0 to 5 do begin
for k := 0 to 6 do begin
......
end;
end;
end;
//---------------------------------------------
//假如长度为4:
iArr[0] := 4;
iArr[1] := 5;
iArr[2] := 6;
iArr[3] := 7;
for i := 0 to 4 do begin
for j := 0 to 5 do begin
for k := 0 to 6 do begin
for l := 0 to 7 do begin
......
end;
end;
end;
end;
//---------------------------------------------
//假如长度为5:
iArr[0] := 4;
iArr[1] := 5;
iArr[2] := 6;
iArr[3] := 7;
iArr[4] := 8
for i := 0 to 4 do begin
for j := 0 to 5 do begin
for k := 0 to 6 do begin
for l := 0 to 7 do begin
for n := 0 to 8 do begin
......
end;
end;
end;
end;
end;
iArr的长度未知
有没有相关预编译之类的命令?
比如:
{$.. }
for i:0=Length(iArr)-1 do
{$.. for itmpArr[i]:=0 to iArr[i]-1 do begin}
{$..}
... ...//处理段
{$..}
{$.. end}
------------------------------------------------------
就是实现动态地写for语句的个数
程序自己for循环体
procedure ForProc(Arr, Loop: array of Integer; Index, Param: Integer);
var
I: Integer;
S: string;
begin
if Index >= Length(Arr) then
begin
S := '';
for I := 0 to Length(Arr) - 1 do
S := S + ',' + IntToStr(Loop[I]);
Delete(S, 1, 1);
{ TODO : Loop为当前下标 }
TForm1(Param).Memo1.Lines.Add(S);
end else
for I := 0 to Arr[Index] do
begin
Loop[Index] := I;
ForProc(Arr, Loop, Index + 1, Param);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
iArr: array of Integer; //长度可变
iLoop: array of Integer; //长度可变
begin
SetLength(iArr, 3);
SetLength(iLoop, 3);
iArr[0] := 4;
iArr[1] := 5;
iArr[2] := 6;
ForProc(iArr, iLoop, 0, Integer(Self));
end;
0,0,0
0,0,1
0,0,2
0,0,3
0,0,4
0,0,5
0,0,6
0,1,0
0,1,1
0,1,2
0,1,3
0,1,4
0,1,5
0,1,6
0,2,0
0,2,1
0,2,2
0,2,3
0,2,4
0,2,5
0,2,6
0,3,0
0,3,1
0,3,2
0,3,3
0,3,4
0,3,5
0,3,6
0,4,0
0,4,1
0,4,2
0,4,3
0,4,4
0,4,5
0,4,6
0,5,0
0,5,1
0,5,2
0,5,3
0,5,4
0,5,5
0,5,6
1,0,0
1,0,1
1,0,2
1,0,3
1,0,4
1,0,5
1,0,6
1,1,0
1,1,1
1,1,2
1,1,3
1,1,4
1,1,5
1,1,6
1,2,0
1,2,1
1,2,2
1,2,3
1,2,4
1,2,5
1,2,6
1,3,0
1,3,1
1,3,2
1,3,3
1,3,4
1,3,5
1,3,6
1,4,0
1,4,1
1,4,2
1,4,3
1,4,4
1,4,5
1,4,6
1,5,0
1,5,1
1,5,2
1,5,3
1,5,4
1,5,5
1,5,6
2,0,0
2,0,1
2,0,2
2,0,3
2,0,4
2,0,5
2,0,6
2,1,0
2,1,1
2,1,2
2,1,3
2,1,4
2,1,5
2,1,6
2,2,0
2,2,1
2,2,2
2,2,3
2,2,4
2,2,5
2,2,6
2,3,0
2,3,1
2,3,2
2,3,3
2,3,4
2,3,5
2,3,6
2,4,0
2,4,1
2,4,2
2,4,3
2,4,4
2,4,5
2,4,6
2,5,0
2,5,1
2,5,2
2,5,3
2,5,4
2,5,5
2,5,6
3,0,0
3,0,1
3,0,2
3,0,3
3,0,4
3,0,5
3,0,6
3,1,0
3,1,1
3,1,2
3,1,3
3,1,4
3,1,5
3,1,6
3,2,0
3,2,1
3,2,2
3,2,3
3,2,4
3,2,5
3,2,6
3,3,0
3,3,1
3,3,2
3,3,3
3,3,4
3,3,5
3,3,6
3,4,0
3,4,1
3,4,2
3,4,3
3,4,4
3,4,5
3,4,6
3,5,0
3,5,1
3,5,2
3,5,3
3,5,4
3,5,5
3,5,6
4,0,0
4,0,1
4,0,2
4,0,3
4,0,4
4,0,5
4,0,6
4,1,0
4,1,1
4,1,2
4,1,3
4,1,4
4,1,5
4,1,6
4,2,0
4,2,1
4,2,2
4,2,3
4,2,4
4,2,5
4,2,6
4,3,0
4,3,1
4,3,2
4,3,3
4,3,4
4,3,5
4,3,6
4,4,0
4,4,1
4,4,2
4,4,3
4,4,4
4,4,5
4,4,6
4,5,0
4,5,1
4,5,2
4,5,3
4,5,4
4,5,5
4,5,6
递归
同上