2次元配列とは、全ての行と列が同じ長さの配列です。
ジャグ配列とは、2次元配列で各行の長さがバラバラの配列のことです。
ジャグ配列は、配列の中に配列が入っているイメージです。
まず、外側の配列の宣言をしてジャグ配列の行数を決めます。
次に、行ごとにまた配列の宣言をして、列の長さを決めます。
これで、行ごとに長さがバラバラのジャグ配列の宣言ができます。
ジャグ配列の宣言
ジャグ配列の宣言とは、ジャグ配列の型名と名前を決めメモリ上につくることです。(配列の要素は空っぽ)
型名[][]配列名 = new 型名[行数][]; //型名、名前、行数を指定する
配列名[0] = new 型名[行の長さ]; // 1行目の長さを指定
配列名[1] = new 型名[行の長さ]; // 2行目の長さを指定
…
まず、型名、名前、行数を指定したジャグ配列をメモリ上につくります。
次に、ジャグ配列の行ごとに配列を宣言して、行の長さを決めます。
行の番号を指定するには添え字を使います。
配列名[0]がジャグ配列の1行目で、配列名[0]がジャグ配列の2行目です。
これで、ジャグ配列の宣言ができます。
using static System.Console;
class Test
{
static void Main()
{
string[][] kago = new string[2][]; // 2行のジャグ配列の宣言
kago[0] = new string[1]; // 1行目に列の長さを1に指定
kago[1] = new string[2]; // 2行目の列の長さを2に指定
}
}
1行目の配列の長さが1、2行目の配列の長さが2のstring型のジャグ配列kagoの宣言をしています。
ジャグ配列の要素に代入(初期化)と取得
ジャグ配列の要素に代入と取得は添え字を使って行います。
// ジャグ配列の要素に代入する
ジャグ配列名[行の番号][要素の番号] = 値;
// ジャグ配列の値を取得する
ジャグ配列名[行の番号][要素の番号]
ジャグ配列に値を代入するには、[]の中に添え字を書いて指定します。
先頭の[]に書く添え字は、行の番号を意味し、次の[]に書く添え字は要素の番号を意味します。
ジャグ配列の値を取得する場合も、代入と同じです。
using static System.Console;
class Test
{
static void Main()
{
// ジャグ配列の宣言
string[][] kago = new string[2][]; // 2行のジャグ配列の宣言
kago[0] = new string[1]; // 1行目の行の長さを1
kago[1] = new string[2]; // 2行目の行の長さを2
// 要素の代入
kago[0][0] = "イチゴ"; // 1行目の1番目の要素に代入
kago[1][0] = "ミカン"; // 2行目の1番目の要素に代入
kago[1][1] = "モモ"; // 2行目の2番目の要素に代入
// 要素の取得
WriteLine(kago[0][0]); // 1行目の1番目の要素を表示
WriteLine(kago[1][0]); // 1行目の1番目の要素を表示
WriteLine(kago[1][1]); // 1行目の1番目の要素を表示
}
}
イチゴ
ミカン
モモ
1行目の要素数が1、2行目の要素数が2のジャグ配列の宣言をしています。
要素に以下のものを代入して、表示しています。
– 1行目の1つ目の要素にはイチゴ
– 2行目の1つ目の要素にはミカン
– 2行目の2つ目の要素にはモモ
ジャグ配列の行ごとの配列の宣言と代入(初期化)を同時にする
ジャグ配列の行ごとの宣言と代入を同時にすることができます。
using static System.Console;
class Test
{
static void Main()
{
string[][] kago = new string[2][];
kago[0] = new string[1] { "イチゴ" }; // 1行目の長さを1にして、要素を代入
kago[1] = new string[2] { "ミカン", "モモ" }; // 2行目の長さを2にして、要素を代入
}
}
1行目をイチゴで初期化
2行目をミカン、モモで初期化
ジャグ配列の配列ごとの宣言と代入を同時にするには、行ごとの配列の宣言のあとに{}で代入したい要素を書きます。
## ジャグ配列の宣言と初期化を同時に行う
ジャグ配列の宣言と初期化を同時に行うこともできます。
class Test
{
static void Main()
{
string[][] kago = new string[][]
{
new string[] { "イチゴ" }, // 1行目の初期化
new string[] { "ミカン", "モモ" } //2行目の初期化
};
}
}
1行目をイチゴで初期化
2行目をミカン、モモで初期化
ジャグ配列の宣言と初期化を同時にすることで、配列の行数の指定や、配列の行ごとの要素数の指定を省略できます。
ジャグ配列の要素をforで取得する
ジャグ配列の要素を全てforで取得できます。
forを使うと、要素を取得するときに全ての添字を書く必要がなくなります。
using static System.Console;
class Test
{
static void Main()
{
string[][] kago = new string[2][];
kago[0] = new string[1];
kago[1] = new string[2];
kago[0][0] = "イチゴ";
kago[1][0] = "ミカン";
kago[1][1] = "モモ";
for (int i = 0; i < kago.Length; i++) // 行の数だけループする
{
for (int j = 0; j < kago[i].Length; j++) // 行ごとの要素の数だけループする
{
WriteLine(kago[i][j]); // 全ての要素を表示する
}
}
}
}
イチゴ
ミカン
モモ
forを入れ子にすることで、外側のforでジャグ配列の行の数だけループ、内側で、行ごとの要素の数だけループすることができます。