p.142 3次元以上の配列
・次元数に制限はないが、要素数が非常に多くになるので、処理効率に注意
・C#の多次元配列は要素数×要素数×要素数×…で増えるので、使わない要素が増えてしまうことがある
・以下は3次元の場合:
・宣言の書式: 型[,,] 配列名; //例: string[,,] names; 3次元配列namesの宣言
・生成の書式: 配列名 = new 型[要素数①,要素数②,要素数③]; //例: names = new string[4, 5, 6];
・宣言と生成は1文で行える 例:string[,,] names = new string[4, 5, 6];
・3次元配列の生成時にも初期値を与える(初期化する)ことが可能
・書式: 型[,,] 配列名 = {{{値,…},…},…};
例: int[,,] n = {{{1,2,3},{4,5,6}},{{7,8,9},{10,11,12}}}; //2×2×3要素になる
・利用書式例: n[0,0,0]は1、n[1,1,2]は12
・n次元配列を用いるにはn重ループにすると良い
・2次元配列も同様だが、配列名.Lengthプロパティを用いると、次元とは無関係に全要素数が得られる。
・配列名.Rankプロパティを用いると、次元数が得られる。
p.143 array04.cs
//p.143 array04.cs
using System;
class array04 {
public static void Main() {
int[,,] ar = new int[2, 2, 3] {
{{0, 1, 2}, //順に[0,0,0][0,0,1][0,0,2]
{3, 4, 5} //順に[0,1,0][0,1,1][0,1,2]
},
{{6, 7, 8}, //順に[1,0,0][1,0,1][1,0,2]
{9, 10, 11} //順に[1,1,0][1,1,1][1,1,2]
}
};
Console.WriteLine("配列の次元 = {0}", ar.Rank); //次元数を表示
Console.WriteLine("arの個数 = {0}", ar.Length); //要素数を表示
for (int i = 0; i < 2; i++) { //1番目の添字
for (int j = 0; j < 2; j++) { //2番目の添字
for (int k = 0; k < 3; k++) { //3番目の添字
Console.Write("{0}, ", ar[i, j, k]); //順に表示
}
}
}
Console.WriteLine(); //改行
}
}
p.144 ジャグ配列
・要素数の積ではなく、配列の配列によって多次元配列を表すのがジャグ配列
※ Javaの多次元配列はジャグ配列のみ
・型と意味が同じであれば要素数が異なる配列をまとめることができるので、使わない要素が増えてしまうことがない
例: a[0][0],a[0][1],a[1][0],a[1][1],a[1][2],a[1][3],a[1][4]とできる
・ただし、初期化などの書式が煩雑になる
・以下は2次元の場合:
・宣言の書式: 型[][] 配列名; //例: string[][] names; ジャグ配列namesの宣言
・生成の書式: 配列名 = new 型[要素数][]; //末尾の要素数は自由なので指定不要
・宣言と生成は1文で行える 例:string[][] names = new string[4][];
・内側の配列の初期化が可能
・例:
int[][] n = new int[3][];
n[0] = new int[1]{0};
n[1] = new int[2]{1, 2};
n[2] = new int[3]{1, 2, 3};
・例:上記を1行にできる
var m = new int[3][]{ new int[1]{0}, new int[2]{1, 2}, new int[3]{1, 2, 3} };
提出:アレンジ演習:p.140 array03.cs