.NET Visual C#言語入門 > 配列
のぶ亭『プログラミングの相談窓口』 … 様々なプログラミング問題を個別対応致します |
配列
配列とは、同じ性質のデータを複数個用意する方法です。同じ名前、同じ型で連続したデータ構造になります。別名「テーブル」とも呼ばれています。
配列には、1次元、多次元、ジャグ配列があります。
class TestArraysClass { static void Main() { // 1次元配列 int[] array1 = new int[5]; // 1次元配列と初期化 int[] array2 = new int[] { 1, 3, 5, 7, 9 }; // 1次元配列と初期化 int[] array3 = { 1, 2, 3, 4, 5, 6 }; // 多次元配列 int[,] multiDimensionalArray1 = new int[2, 3]; // 多次元配列と初期化 int[,] multiDimensionalArray2 = { { 1, 2, 3 }, { 4, 5, 6 } }; // ジャグ配列(配列の配列) int[][] jaggedArray = new int[6][]; // ジャグ配列(配列の配列)と初期化 jaggedArray[0] = new int[4] { 1, 2, 3, 4 }; } }
配列には、次の特徴があります。
- 配列は、1 次元配列、多次元配列、またはジャグ配列のいずれかになります。
- 数値配列要素の既定値はゼロに設定され、参照要素は null に設定されます。
- ジャグ配列は配列の配列です。そのため、配列要素は参照型で、null に初期化されます。
- 配列には、ゼロから始まるインデックスが付けられます。n 個の要素を含む配列には、0 から n-1 までのインデックスが付けられます。
- 配列の要素および配列型は、どのような型でもかまいません。
- 配列型は、抽象基本型 Array から派生した参照型です。この型は IEnumerable と IEnumerable を実装するので、C# のすべての配列で foreach 反復処理を使用できます。
1次元配列
この配列には、array[0] から array[4] までの要素が含まれています。new 演算子を使って配列を作成すると、配列の要素は、既定値で初期化されます。この例では、配列要素はすべて 0 に初期化されます。
// 5個の整数値を含む配列 int[] array = new int[5];
// 文字列型の配列も、同様の方法で宣言できます。 string[] stringArray = new string[6];
配列の初期化
// 宣言時に配列を初期化できます。その場合、ランク指定子は、 // 初期化リスト内の要素数で既に与えられているので必要ありません。 int[] array1 = new int[5] { 1, 3, 5, 7, 9 }; // 文字列配列も、同じ方法で初期化できます。 // 次に示す文字列配列の宣言では、各配列要素を曜日の名前で初期化します。 string[] weekDays = new string[] { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; // 宣言時に配列を初期化するときは、次の短縮形を使用できます。 int[] array2 = { 1, 3, 5, 7, 9 }; string[] weekDays2 = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; // 初期化せずに配列変数を宣言することはできますが、そのような変数に配列を // 代入するときは、new 演算子を使用する必要があります。 int[] array3; array3 = new int[] { 1, 3, 5, 7, 9 }; // OK //array3 = {1, 3, 5, 7, 9}; // Error
値型と参照型の配列
// 配列宣言 SomeType[] array4 = new SomeType[10];
このステートメントの結果は、SomeType が値型か参照型かによって異なります。値型の場合は、SomeType 型のインスタンス
10 個の配列が作成されます。SomeType が参照型の場合は、10 個の要素から成る配列が作成されて、各要素は null
参照で初期化されます。
多次元配列
複数の次元で構成される配列を作成できます。
// 4つの行と2つの列から成る2次元配列が作成されます。 int[,] array = new int[4, 2];
// 大きさが 4、2、3 の 3 つの次元を持つ配列が作成されます。 int[, ,] array1 = new int[4, 2, 3];
配列の初期化
// 宣言時の配列の初期化 int[,] array2D = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; int[, ,] array3D = new int[,,] { { { 1, 2, 3 } }, { { 4, 5, 6 } } }; // ランクを指定せず,配列を初期化する int[,] array4 = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; // 初期化せずに配列変数を宣言する場合 // new 演算子を使用して配列を変数に割り当てます。 int[,] array5; array5 = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; // OK //array5 = {{1,2}, {3,4}, {5,6}, {7,8}}; // Error // 配列の要素に変数を代入する array5[2, 1] = 25; // 配列変数を既定値に初期化するコード例 (ジャグ配列を除く)。 int[,] array6 = new int[10, 10];
ジャグ配列(配列の配列)
ジャグ配列とは、その要素も配列である配列です。ジャグ配列の要素は、次元やサイズが異なっていてもかまいません。ジャグ配列は、"配列の配列" と呼ばれることもあります。次の例で、ジャグ配列の宣言、初期化、アクセスの各方法について説明します。
// 3つの要素を持つ1次元配列の宣言で、各要素は整数の1次元配列 int[][] jaggedArray = new int[3][]; // jaggedArray を使用するには、先に要素を初期化する必要がある。 // 要素の初期化は、次の方法で行う。各要素は、整数の1次元配列です。 jaggedArray[0] = new int[5]; // 5個の整数値の配列 jaggedArray[1] = new int[4]; // 4個の整数値の配列 jaggedArray[2] = new int[2]; // 2個の整数値の配列 // 初期化子を使って配列要素に値を格納することもできます。 // この場合、配列のサイズは必要ありません。 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} };
// 次の簡単な形式を使用できます。 // 要素の初期化では new 演算子を省略できないことに注意してください。 // これは、要素に既定の初期化はないためです。 int[][] jaggedArray3 = { new int[] {1,3,5,7,9}, new int[] {0,2,4,6}, new int[] {11,22} };
// ジャグ配列は配列の配列です。そのため、配列要素は参照型で、null に // 初期化されます。各配列要素は、次の例に示す方法で参照できます。 // Assign 77 to the second element ([1]) of the first array ([0]): jaggedArray3[0][1] = 77; // Assign 88 to the second element ([1]) of the third array ([2]): jaggedArray3[2][1] = 88;
ジャグ配列と多次元配列の併用
// サイズが異なる2次元配列要素を含む1次元のジャグ配列を宣言および // 初期化する例です。 int[][,] jaggedArray4 = new int[3][,] { new int[,] { {1,3}, {5,7} }, new int[,] { {0,2}, {4,6}, {8,10} }, new int[,] { {11,22}, {99,88}, {0,9} } };
各要素には、次の例に示す方法でアクセスできます。 この例では、最初の配列の要素 [1,0] の値 (5) を表示しています。 System.Console.Write("{0}", jaggedArray4[0][1, 0]);
メソッド Length は、ジャグ配列に含まれる配列数を返します。 たとえば、前の配列を宣言した状態で、次の行を指定したとします。 System.Console.WriteLine(jaggedArray4.Length); この行は、値 3 を返します。
使用例
次の例では、配列を要素とする配列を作成します。 各配列要素のサイズは同じではありません。 class ArrayTest { static void Main() { // Declare the array of two elements: int[][] arr = new int[2][]; // Initialize the elements: arr[0] = new int[5] { 1, 3, 5, 7, 9 }; arr[1] = new int[4] { 2, 4, 6, 8 }; // Display the array elements: for (int IndexX = 0; IndexX < arr.Length; IndexX++) { System.Console.Write("Element({0}): ", IndexX); for (int IndexY = 0; IndexY < arr[IndexX].Length; IndexY++) { System.Console.Write("{0}{1}", arr[IndexX][IndexY], IndexY == (arr[IndexX].Length - 1) ? "" : " "); } System.Console.WriteLine(); } } } 結果 Element(0): 1 3 5 7 9 Element(1): 2 4 6 8