自由度の高い配列(C#のジャグ配列)
・Java言語などでは配列の配列によって2次元以上の配列を表現している
つまり、a[]={1,2}、b[]={3,4,5} とすると ab[][] = {{1,2},{3,4,5}} とできる
・よって、配列が「要素数×要素数」ではなくても良い
・これはC/C++の配列や、C#の通常の配列では表現できない
・しかし、C#のジャグ配列を用いると可能
・ジャグ配列の宣言と生成: 型[][] 配列名 = new 型[要素数][];
・ジャグ配列の初期化の書式: 型[][] 配列名 = { new 型[]{値,…}, … }
例: int [][] aa = { new[] {1,2}, new[] {3,4,5} };
・ジャグ配列に対するforeach文は2次元では2重ループになる
foreach (var wa in aa) { //ジャグ配列aaの全要素配列について繰返す
foreach (var ww in wa) { //要素配列を入れた作業変数waの全要素について繰返す
Console.WriteLine(ww);
}
}
ジャグ配列の線形探索:アルゴリズム
①ジャグ配列の全要素配列について下記を繰返す ・要素配列の全要素について下記を繰返す ・探索値と要素値が等しければ「ある」と表示して抜ける ②なかった場合は「ない」と表示する
参考:通常の配列の場合
int[,] val = { {10,20,30 },{40,50,60 } }; //元の2次元配列
Console.Write("検索値:");
var goal = int.Parse(Console.ReadLine());; //検索値
int i = 0, j = 0;
bool f = false; //完了フラグをオフにしておく
for(; i < 2; i++) {
for(j = 0; j < 3; j++) {
if(val[i, j] == goal) {
Console.WriteLine("[{0}][{1}]にある", i, j); //先頭が1番目だとする
f = true; //完了フラグオン
break; //内側のループを抜ける
}
}
if(f) { //完了フラグがオンなら
break; //外側のループも抜ける
}
}
if (!f) { //完了フラグがオフのままになっていたら
Console.WriteLine("見つからない");
}
自由参加課題
最初に見つかった位置を「aa[1][2]にあります」というように表示しよう。
提出:ジャグ配列の線形探索:プログラム