これをうまく説明する .NET 配列を見てみましょう。
C# では、ネストされた方法で定義されたジャグ配列が区別されます。
int[][] jagged = new int[3][];
ネストされた各配列の長さは異なる場合があります。
jagged[0] = new int[3];
jagged[1] = new int[4];
(そして、ネストされた配列の 1 つがまったく初期化されていないことに注意してください。つまり、null
.)
対照的に、多次元配列は次のように定義されます。
int[,] multidim = new int[3, 4];
ここで、ネストされた配列について話すのは意味がありません。実際にアクセスしようとするmultidim[0]
と、コンパイル時のエラーになります。すべての次元を指定してアクセスする必要がありますmultidim[0, 1]
。
上記の宣言が示すように、それらのタイプも異なります。
さらに、それらの扱いはまったく異なります。たとえば、タイプ のオブジェクトを使用して、上記のジャグ配列を反復処理できますint[]
。
foreach (int[] x in jagged) …
ただし、多次元配列の反復処理は type の項目で行われますint
:
foreach (int x in multidim) …
概念的には、ジャグ配列は配列の配列(配列の配列の… 無限大)でT
あり、多次元配列はアクセス パターンが設定された配列ですT
(つまり、インデックスはタプルです)。