2011-02-03 21 views
1
で引数として渡す多次元配列

可能性の重複:
Pass a multidimensional array as a parameter in Delphiデルファイ

こんにちはすべて、としてここに 同じ質問: Pass a multidimensional array as a parameter in Delphi

が、別の答えを必要とします。

type 
MultiArray = array of array of Integer; 

procedure Foo(a : MultiArray); 
begin 

end; 

procedure Bar(a : array of Integer); 
var i : Integer; 
begin 
    for i in a do WriteLn(IntToStr(i)); 
end; 

const 
    a : array[0..2] of Integer = (1, 2, 3); 
    ma : array[0..1] of array[0..1] of Integer = ((1,2),(3,4)); 
begin 
    Bar(a); 
    Bar([1,2,3]); 
    //Foo(ma); 
end. 

異なるサイズの配列をFooに渡したいとします。このようにできない場合、「回避策」はありますか?

+0

あなたの古い質問に対するドニーの答えのようにする必要があります。 –

+3

他の人の質問の正確な複製を求めるのは容認できますが、あなた自身の質問をもう一度聞くのはかなり貧弱です。 –

+1

私は古い質問は私の質問ではなかったことを確認するために、あなたがものを知らないという理由だけで、他の答えは存在しないことを言っていない、それが悪いことだと思います。 Sergは私の問題に対する完璧な解決策を提供します。 – hansmaad

答えて

2

を行うことができます

type 
    TMultiArray: array of array of integer; 

procedure Foo(a: TMultiArray); 

私は質問が多次元配列オープンうとしていることを推測した場合。

デルファイには多次元配列のオープンはありません。しかし、動的配列を要素として1次元のオープン配列を作成することができます。ここに例があります:

type 
    TIntArray = array of Integer; 

procedure Test(arr: array of TIntArray); 
begin 
    ShowMessage(IntToStr(arr[1,1])); 
end; 

procedure TForm9.Button5Click(Sender: TObject); 
begin 
    Test([TIntArray.Create(1,2), TIntArray.Create(2,3)]); 
end; 
+1

+1動的配列でCreateを呼び出すことができるかどうかわかりませんでした。 –

+0

@David:デルファイ2007の機能は、おそらく以前のバージョンで存在すると確信しています。 – kludg

+0

@David:Delphi 6または7で追加されました(7で動作することは分かっています)。これは、定数配列を初期化するための滑らかな方法でもあります。 'MyIntArray:= TIntArray.Create(1、2、3、12、23、34、96、57、106);'確認ビート「CONST MyIntArray:[0..8] =整数(1、2のアレイ,. ..); ' - 新しいエントリを2番目の例に追加するには、配列の境界と配列自体の両方を更新する必要がありますが、最初は配列に要素を追加する必要があります。 –

1

私はあなたが何をしたいのか得ることはありません。あなたは書く

異なる サイズの配列をFooに渡したいと思います。あなたがそれをしない理由

まあ、それから?

、あなたは

var 
    ShortMultiArray, LongMultiArray, HugeMultiArray: TMultiArray; 

begin 
    SetLength(ShortMultiArray, 10, 10); 
    SetLength(LongMultiArray, 100, 100); 
    SetLength(HugeMultiArray, 1000, 1000); 

    Foo(ShortMultiArray); 
    Foo(LongMultiArray); 
    Foo(HugeMultiArray); 
end;