ジャグ配列 (C# プログラミング ガイド)
ジャグ配列は、その要素がサイズが異なる場合がある配列からなる配列です。 ジャグ配列は、"配列の配列" と呼ばれることもあります。次の例は、ジャグ配列の宣言、初期化、アクセスを行う方法を示しています。
次の 3 つの要素を持つ 1 次元配列の宣言では、それぞれが整数の 1 次元配列になっています。
int[][] jaggedArray = new int[3][];
jaggedArray
を使用する前に、その要素を初期化する必要があります。 次のように要素を初期化することができます。
jaggedArray[0] = new int[5];
jaggedArray[1] = new int[4];
jaggedArray[2] = new int[2];
各要素は、整数の 1 次元配列です。 最初の要素は 5 つの整数の配列で、2 番目の要素は 4 つの整数の配列であり、3 番目の要素は 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;
ジャグ配列と多次元配列を混在させることができます。 異なるサイズの 3 つの 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 i = 0; i < arr.Length; i++)
{
System.Console.Write("Element({0}): ", i);
for (int j = 0; j < arr[i].Length; j++)
{
System.Console.Write("{0}{1}", arr[i][j], j == (arr[i].Length - 1) ? "" : " ");
}
System.Console.WriteLine();
}
// Keep the console window open in debug mode.
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
}
/* Output:
Element(0): 1 3 5 7 9
Element(1): 2 4 6 8
*/