MENU

【C#】多次元配列(2次元配列)の使い方

皆さん、こんにちは!今日は、C#プログラミングの中でもとても便利な機能、「多次元配列」についてお話しします。多次元配列は、データを表形式で整理したい時に大活躍する強力なツールです。例えば、エクセルのようなスプレッドシートをイメージしてみてください。そんな表形式のデータを、プログラムの中で簡単に扱えるようになるんです!

目次

自己紹介

私は新卒でFAシステムの開発会社に入社した2年目エンジニアです。(2024年時点)

私はC#とVBを学習中なのでブログを見返す用のメモ代わりに活用しています。私の知識を共有し、皆様の学習のサポートとなれば幸いです。

多次元配列とは?

多次元配列は、単純に言えば「配列の中に配列がある」ような構造です。1次元の配列が一列の数値や文字列を格納できるのに対し、多次元配列は複数の行と列を持つ表のようなデータを扱うことができます。

C#では、2次元配列が最もよく使われます。これは、ちょうど表やグリッドのような構造になっています。

では、具体的にどのように使うのか、簡単な例を見てみましょう:

// 3行2列の2次元配列を宣言し、初期化する
int[,] matrix = new int[3, 2] {
    {1, 2},
    {3, 4},
    {5, 6}
};

// 配列の要素にアクセスする
Console.WriteLine(matrix[0, 0]); // 出力: 1
Console.WriteLine(matrix[1, 1]); // 出力: 4

// 配列をループで処理する
for (int i = 0; i < 3; i++)
{
    for (int j = 0; j < 2; j++)
    {
        Console.Write(matrix[i, j] + " ");
    }
    Console.WriteLine();
}
// 出力:
// 1 2
// 3 4
// 5 6

この例では、3行2列の2次元配列を作成し、各要素に値を設定しています。そして、個別の要素にアクセスする方法と、配列全体をループで処理する方法を示しています。

多次元配列を使うと、例えば生徒の試験の点数を管理したり、ゲームの盤面状態を表現したりと、様々な場面で活用できます。

これから、多次元配列の宣言方法、初期化、要素へのアクセス方法など、更に詳しく見ていきましょう。C#での多次元配列の使い方をマスターすれば、複雑なデータ構造も簡単に扱えるようになりますよ!

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

C#で多次元配列を使用する際、まず最初に行うのが配列の宣言と初期化です。これには複数の方法がありますので、順に見ていきましょう。

1. 宣言と同時に初期化する方法

// 3行4列の2次元配列を宣言し、同時に初期化
int[,] matrix = new int[3, 4] {
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12}
};

この方法では、配列の大きさ(行数と列数)を明示的に指定し、同時に各要素の値を設定しています。

2. サイズのみを指定して宣言する方法

// 3行4列の2次元配列を宣言(初期値は全て0)
int[,] matrix = new int[3, 4];

この方法で宣言すると、全ての要素が型のデフォルト値(intの場合は0)で初期化されます。

3. 宣言と初期化を分ける方法

// まず配列を宣言
int[,] matrix;

// 後で初期化
matrix = new int[3, 4] {
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12}
};

この方法は、配列の宣言と初期化を別々のタイミングで行いたい場合に便利です。

多次元配列へのアクセスと操作

多次元配列の各要素へのアクセスは、インデックスを使って行います。2次元配列の場合、[行のインデックス, 列のインデックス]という形式でアクセスします。

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

// 2行目、3列目の要素にアクセス(値は7)
int element = matrix[1, 2];
Console.WriteLine(element);  // 出力: 7

// 要素の値を変更
matrix[0, 3] = 100;
Console.WriteLine(matrix[0, 3]);  // 出力: 100

注意点として、C#の配列のインデックスは0から始まります。つまり、最初の要素は[0, 0]でアクセスします。

多次元配列のループ処理

多次元配列の全ての要素に対して操作を行いたい場合、ネストされたforループを使用するのが一般的です。

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

// 配列の全要素を表示
for (int i = 0; i < matrix.GetLength(0); i++)
{
    for (int j = 0; j < matrix.GetLength(1); j++)
    {
        Console.Write(matrix[i, j] + "\t");
    }
    Console.WriteLine();
}

この例では、GetLength()メソッドを使用しています。GetLength(0)は配列の行数を、GetLength(1)は列数を返します。

出力結果:

1    2    3    4
5    6    7    8
9    10   11   12

多次元配列の応用例

多次元配列は様々な場面で活用できます。以下にいくつかの例を示します。

1. 生徒の成績管理

string[,] grades = new string[3, 4] {
    {"山田太郎", "80", "75", "90"},
    {"佐藤花子", "85", "90", "88"},
    {"鈴木一郎", "70", "85", "82"}
};

for (int i = 0; i < grades.GetLength(0); i++)
{
    Console.WriteLine($"氏名: {grades[i, 0]}, 国語: {grades[i, 1]}, 数学: {grades[i, 2]}, 英語: {grades[i, 3]}");
}

2.シンプルな2Dゲームの盤面

char[,] gameBoard = new char[3, 3] {
    {'X', 'O', 'X'},
    {'O', 'X', 'O'},
    {'O', 'X', 'X'}
};

for (int i = 0; i < gameBoard.GetLength(0); i++)
{
    for (int j = 0; j < gameBoard.GetLength(1); j++)
    {
        Console.Write(gameBoard[i, j] + " ");
    }
    Console.WriteLine();
}

3. 画像処理(ピクセル操作)

実際の画像処理はもっと複雑ですが、以下は概念を示す簡単な例です:

int[,] image = new int[5, 5];

// 画像に白黒のパターンを作成
for (int i = 0; i < image.GetLength(0); i++)
{
    for (int j = 0; j < image.GetLength(1); j++)
    {
        image[i, j] = (i + j) % 2 == 0 ? 255 : 0;  // 255は白、0は黒
    }
}

// パターンを表示
for (int i = 0; i < image.GetLength(0); i++)
{
    for (int j = 0; j < image.GetLength(1); j++)
    {
        Console.Write(image[i, j] == 255 ? "□ " : "■ ");
    }
    Console.WriteLine();
}

まとめ

多次元配列は、C#プログラミングにおいて非常に強力なツールです。表形式のデータを扱う際に特に便利で、様々な応用が可能です。

  • 宣言と初期化の方法を理解し、適切に使い分けることが大切です。
  • インデックスを使って個別の要素にアクセスできます。
  • ネストされたループを使うことで、全要素に対して操作を行えます。
  • 成績管理、ゲーム開発、画像処理など、多様な場面で活用できます。

多次元配列の概念をしっかり理解し、実際にコードを書いて試してみることで、より複雑なデータ構造も扱えるようになります。プログラミングの世界では、このような基本的な概念の理解が、より高度な課題を解決する力につながります。

これからも練習を重ね、多次元配列を自在に操れるようになりましょう!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次