ひとりでのアプリ開発 - fineの備忘録 -

ひとりでアプリ開発をするなかで起こったことや学んだことを書き溜めていきます

C# - ジャグ配列

初めに

 ジャグ配列は、その要素がサイズが異なる場合がある配列からなる配列です。 本記事では、ジャグ配列の基本的な使い方をまとめます。

ジャグ配列

ジャグ配列とは

 ジャグ配列とは、その要素がサイズが異なる場合がある配列からなる配列です。 ジャグ配列は、"配列の配列" と呼ばれることもあります。

宣言、初期化

 ジャグ配列は次のように宣言します。

(例)

//定義
int[][] jaggedArray = new int[3][];
//初期化
jaggedArray[0] = new int[5];
jaggedArray[1] = new int[4];
jaggedArray[2] = new int[2];

 上の例では、int 型の配列を 3つ含む配列を jaggedArray として定義しています。ジャグ配列の各要素も配列であり、それぞれの長さは異なってよいです。

 初期化子を用いて、配列の要素に値を格納することもできます。

jaggedArray[0] = new int[] { 1, 3, 5, 7, 9 };
jaggedArray[1] = new int[] { 0, 2, 4, 6 };
jaggedArray[2] = new int[] { 11, 22 };


 次のように宣言時に配列を初期化することもできます。

int[][] jaggedArray2 = new int[][]
{
new int[] { 1, 3, 5, 7, 9 },
new int[] { 0, 2, 4, 6 },
new int[] { 11, 22 }
};
ジャグ配列の要素へのアクセス、変更
// ジャグ配列の作成
int[][] scores = new int[3][];
scores[0] = new int[4] { 90, 85, 92, 88 };
scores[1] = new int[3] { 78, 80, 85 };
scores[2] = new int[5] { 95, 89, 92, 87, 90 };

// ジャグ配列の要素へのアクセス
int mathScore = scores[0][2];
int englishScore = scores[1][0];
int historyScore = scores[2][3];

// ジャグ配列の要素の変更
scores[0][1] = 95;
scores[1][2] = 88;
scores[2][4] = 93;
使用例

 複数人がいくつかのテストを受けたときの点数をジャグ配列に格納してみます。

// ジャグ配列の作成
int[][] scores = new int[3][];
scores[0] = new int[4] { 90, 85, 92, 88 };
scores[1] = new int[3] { 78, 80, 85 };
scores[2] = new int[5] { 95, 89, 92, 87, 90 };

// ジャグ配列の要素へのアクセス
int mathScore = scores[0][2];
int englishScore = scores[1][0];
int historyScore = scores[2][3];

// ジャグ配列の要素の変更
scores[0][1] = 95;
scores[1][2] = 88;
scores[2][4] = 93;

// ジャグ配列の要素の列挙
for (int i = 0; i < scores.Length; i++)
{
    for (int j = 0; j < scores[i].Length; j++)
    {
        Console.WriteLine("Student {0}, Subject {1}: {2}", i, j, scores[i][j]);
    }
}


多次元配列との違い

 多次元配列は、int[ , ] のように要素が複数の次元で構成される配列です。

 int[2, 3] とすると、要素数3の配列を2つ含む配列になります。各次元のサイズが事前に決まっている必要があるため、要素の形状が規則的な場合に適しています。

 ジャグ配列は、子配列のサイズが個別で指定できるため、各要素のサイズが異なる場合やデータの形状が均一でない場合に適しています。