我知道可以用下面的方法,把一维数组直接作为函数参数传递。      
但是,当setData的参数类型为二维数组 array of array of sting 时,怎么写?请各位大侠指教。
   
procedure TForm1.Button1Click(Sender: TObject);      
begin      
  setData(['aaa', 'bbb']);//如果setData的参数是二维数组呢?     
end;      
   
procedure TForm1.setData(data: Array of String);      
var i: Integer;      
begin      
  for i := 0 to Length(data) - 1 do      
  begin      
    ListBox1.Items.Add(data[i]);      
  end;      
end;

解决方案 »

  1.   

    Type MyArray = array of array of string;procedure TForm1.Button1Click(Sender: TObject);
    var
      ta: MyArray;
    function MyProc(sa: MyArray): string;
    begin
      Result := sa[0][0]+sa[0][1]+sa[1][0]+sa[1][1];
    end;
    begin
      SetLength(ta, 2);
      SetLength(ta[0], 2);
      SetLength(ta[1], 2);
      ta[0][0] := 'a';
      ta[0][1] := 'b';
      ta[1][0] := 'c';
      ta[1][1] := 'd';
      ShowMessage(MyProc(ta));
    end;
      

  2.   

    Type MyArray = array of array of string;procedure TForm1.Button1Click(Sender: TObject);
    var
      tArray: MyArray;
    begin
      SetLength(tArray, 2, 2);
      tArray[0][0] := 'aaa';
      tArray[0][1] := 'bbb';
      tArray[1][0] := 'ccc';
      tArray[1][1] := 'ddd';
      setData(tArray);//如果setData的参数是二维数组呢?
    end;procedure TForm1.setData(data: MyArray);
    var
      i, j: Integer;
    begin
      for i := 0 to Length(data) - 1 do
        for j := 0 to Length(data) - 1 do
          ListBox1.Items.Add(data[i][j]);
    end;
      

  3.   

    谢谢两位,我已经找到另一种解决办法了。
    我就是觉得为每个元素逐一赋值的办法太罗索了,如果我有几十个元素,我要写即使行代码:
      tArray[0][0] := 'aaa';
      tArray[0][1] := 'bbb';
      tArray[1][0] := 'ccc';
      tArray[1][1] := 'ddd';
      ... //太麻烦了,而且每个行列的数据很不直观。我用了另一个办法,我定义一个string,用分号作为“行”分隔符,用逗号作为“列”分割符,这样我只要写一行代码就可以了,而且每行每列的数据非常直观。
    然后再解析这个string。
      

  4.   

    比如,这样定义数据,每行每列的数据都很直观,不容易出错也不容易遗漏:myDataCfg : string =
      '第一行,        haha,     123;  ' +
      '第二行,        adfadf,   2346; ' +
      '第三行,        zxcvzxcv, 90889;' +
      '呵呵哈哈嘿嘿,  tyuty,    12893 ';