【C#】2次元配列(多次元配列)の基本的な使い方:初期化とアクセス

目次

2次元配列とは

C#の配列(Array)は、通常 int[]string[] のような1次元(直線状)のデータ構造を指します。しかし、Excelのシート、ゲームのマップ、座席表、画像データ(ピクセルグリッド)のように、**行(Row)列(Column)**を持つ「格子状」または「表形式」のデータを管理したい場合があります。

このようなデータを効率的に扱うために、C#では2次元配列(多次元配列)がサポートされています。

この記事では、2次元配列の宣言、初期化、および要素へのアクセス方法について解説します。


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

2次元配列は、型名の後にカンマ(,)を一つ入れた [,] を付けて宣言します。

1. サイズを指定して宣言

newキーワードで、[行数, 列数]を指定してインスタンスを生成します。

// 3行4列の int 型配列を作成 (中身はすべて 0 で初期化される)
int[,] matrix = new int[3, 4];

2. 宣言と同時に初期化 (推奨)

値が最初から決まっている場合は、{}(初期化子)をネスト(入れ子)にして使用します。この方法は、new int[,] のように型を明示する方法と、varnew [,] で型推論に任せる方法があります。

using System;

public class Array2DInitialization
{
    public static void Main()
    {
        // 3行4列のグリッドデータを宣言と同時に初期化
        // { {1行目}, {2行目}, {3行目} }
        int[,] gridData = new int[,]
        {
            { 10, 11, 12, 13 },
            { 20, 21, 22, 23 },
            { 30, 31, 32, 33 }
        };

        // var と new [,] を使った型推論でも同じ
        // var gridData = new [,]
        // {
        //     { 10, 11, 12, 13 },
        //     { 20, 21, 22, 23 },
        //     { 30, 31, 32, 33 }
        // };
    }
}

要素へのアクセス:[行, 列]

2次元配列の要素にアクセスするには、1次元配列の[i]とは異なり、[行インデックス, 列インデックス] のようにカンマ区切りで2つのインデックスを指定します。

インデックスは、行も列も0から始まります。

コード例:値の読み取りと書き込み

映画館の座席表(string型)を例に、特定の座席の情報を読み取り、別の座席の情報を書き換える(予約済みにする)例です。

using System;

public class Array2DAccessExample
{
    public static void Main()
    {
        // 座席表 (2行3列)
        string[,] seatLayout = new string[,]
        {
            { "A-1", "A-2", "A-3" },
            { "B-1", "B-2", "B-3" }
        };

        // 1. 値の読み取り (0行目, 1列目)
        string seat_A2 = seatLayout[0, 1];
        Console.WriteLine($"[0, 1] の座席: {seat_A2}"); // A-2

        // 2. 値の書き込み(変更) (1行目, 2列目)
        Console.WriteLine($"[1, 2] を変更前: {seatLayout[1, 2]}"); // B-3
        
        seatLayout[1, 2] = "Reserved"; // "B-3" を "Reserved" に上書き
        
        Console.WriteLine($"[1, 2] を変更後: {seatLayout[1, 2]}"); // Reserved
    }
}

出力結果:

[0, 1] の座席: A-2
[1, 2] を変更前: B-3
[1, 2] を変更後: Reserved

ループ処理:GetLength メソッド

2次元配列のすべての要素を処理(反復処理)するには、forループを2重(ネスト)にするのが一般的です。

ここで注意が必要なのは、1次元配列の.Length(総要素数)ではなく、GetLength(int dimension)メソッドを使用する点です。

  • array.GetLength(0): 第1次元の長さ(行数)を返します。
  • array.GetLength(1): 第2次元の長さ(列数)を返します。

コード例:2重ループによる全要素の出力

using System;

public class Array2DLoopExample
{
    public static void Main()
    {
        int[,] gridData = new int[,]
        {
            { 10, 11, 12, 13 },
            { 20, 21, 22, 23 },
            { 30, 31, 32, 33 }
        };

        // GetLength(0) で行数を取得 (この例では 3)
        int rowCount = gridData.GetLength(0);
        
        // GetLength(1) で列数を取得 (この例では 4)
        int colCount = gridData.GetLength(1);

        Console.WriteLine($"行数: {rowCount}, 列数: {colCount}");
        Console.WriteLine("--- グリッドデータ一覧 ---");

        // 外側のループ (行: i)
        for (int i = 0; i < rowCount; i++)
        {
            // 内側のループ (列: j)
            for (int j = 0; j < colCount; j++)
            {
                // [i, j] でアクセス
                int value = gridData[i, j];
                Console.Write($"{value} "); // Write で改行せずに出力
            }
            Console.WriteLine(); // 1行が終わるごとに改行
        }
    }
}

出力結果:

行数: 3, 列数: 4
--- グリッドデータ一覧 ---
10 11 12 13 
20 21 22 23 
30 31 32 33 

まとめ

2次元配列は、C#で表形式のデータを扱うための基本的なデータ構造です。

  • new int[行数, 列数] または new [,] { ... } で初期化します。
  • 要素へのアクセスは myArray[行, 列] とカンマで区切ります。
  • ループ処理で各次元の長さを取得するには、GetLength(0)(行数)とGetLength(1)(列数)を使用します。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次