Unity & C# 学習教材

多次元配列

多次元配列は行と列のような格子状(グリッド)にデータを配置する配列です。C# では int[,] のようにカンマで区切った型表記を使います。

学習目標

前提知識


1. 2 次元配列とは

2 次元配列は行(row)と列(column)の組み合わせでデータを管理します。座標系のグリッドやゲームのマップデータなどに使われます。

[,0] [,1] [,2] [,3] [0,] 1 2 3 4 [1,] 5 6 7 8 [2,] 9 10 11 12 matrix[0,0] matrix[2,3]

3 行 4 列の int[,] matrixmatrix[行, 列] の形でアクセスします。


2. 2 次元配列の宣言と初期化

書式:2 次元配列の宣言

1
型[,] 変数名 = new 型[行数, 列数];
要素 説明
型[,] 2 次元配列の型。カンマの数が次元数を示す
new 型[行数, 列数] 指定したサイズの配列を生成(すべて初期値)
1
int[,] matrix = new int[3, 4];  // 3 行 4 列(すべて 0)

初期化子で宣言

1
2
3
4
5
int[,] matrix = {
    { 1,  2,  3,  4 },   // 行 0
    { 5,  6,  7,  8 },   // 行 1
    { 9, 10, 11, 12 }    // 行 2
};

3. 要素へのアクセス

書式:2 次元配列の要素アクセス

1
配列[行インデックス, 列インデックス]
1
2
3
4
5
6
7
8
9
10
11
int[,] matrix = {
    { 1,  2,  3,  4 },
    { 5,  6,  7,  8 },
    { 9, 10, 11, 12 }
};

Console.WriteLine(matrix[0, 0]);  // 1(左上)
Console.WriteLine(matrix[1, 2]);  // 7
Console.WriteLine(matrix[2, 3]);  // 12(右下)

matrix[0, 0] = 99;               // 値の書き換え

4. 2 次元配列の走査

GetLength(0) で行数、GetLength(1) で列数を取得してネスト for ループで全要素を走査します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int[,] matrix = {
    { 1,  2,  3,  4 },
    { 5,  6,  7,  8 },
    { 9, 10, 11, 12 }
};

int rows = matrix.GetLength(0);  // 3
int cols = matrix.GetLength(1);  // 4

for (int i = 0; i < rows; i++)
{
    for (int j = 0; j < cols; j++)
    {
        Console.Write($"{matrix[i, j],3}");
    }
    Console.WriteLine();
}
//   1  2  3  4
//   5  6  7  8
//   9 10 11 12

Rank プロパティ

1
2
Console.WriteLine(matrix.Rank);   // 2(2 次元配列)
Console.WriteLine(matrix.Length); // 12(全要素数 = 3 × 4)

ワンポイントアドバイス

3 次元以上の配列

カンマを増やすことで 3 次元以上の配列も宣言できます。

1
2
3
4
// 3 次元配列(奥行き × 行 × 列のようなイメージ)
int[,,] cube = new int[2, 3, 4];
Console.WriteLine(cube.Rank);   // 3
Console.WriteLine(cube.Length); // 24(2 × 3 × 4)

実用上は 2 次元を超える多次元配列はあまり使われません。代わりにジャグ配列(次のページ)やクラスで表現するのが一般的です。


まとめ


理解度チェック

  1. int[,] grid = new int[5, 3] の行数・列数・全要素数はそれぞれいくつですか?
  2. 2 次元配列のすべての要素の合計を計算するコードを書いてください。
  3. matrix[1, 2]matrix[2, 1] は同じ要素を指しますか?
解答を見る
  1. 行数 5、列数 3、全要素数 15GetLength(0)=5, GetLength(1)=3, Length=15

  2. 1
    2
    3
    4
    5
    6
    
    int[,] matrix = { { 1, 2 }, { 3, 4 }, { 5, 6 } };
    int sum = 0;
    for (int i = 0; i < matrix.GetLength(0); i++)
        for (int j = 0; j < matrix.GetLength(1); j++)
            sum += matrix[i, j];
    Console.WriteLine(sum);  // 21
    
  3. 異なる要素です。matrix[1, 2] は 行1・列2、matrix[2, 1] は 行2・列1 を指します。

次のステップ

ジャグ配列 では、行ごとに長さが異なる配列を学び、多次元配列との使い分けを確認します。