ジャグ配列 (C# プログラミング ガイド)Jagged Arrays (C# Programming Guide)

ジャグ配列とは、その要素も配列である配列です。A jagged array is an array whose elements are arrays. ジャグ配列の要素には、異なるディメンションとサイズを指定できます。The elements of a jagged array can be of different dimensions and sizes. ジャグ配列は、"配列の配列" と呼ばれることがあります。A jagged array is sometimes called an "array of arrays." 次の例では、ジャグ配列の宣言、初期化、およびアクセスの方法について説明します。The following examples show how to declare, initialize, and access jagged arrays.

次の 3 つの要素を持つ 1 次元配列の宣言では、それぞれが整数の 1 次元配列になっています。The following is a declaration of a single-dimensional array that has three elements, each of which is a single-dimensional array of integers:

int[][] jaggedArray = new int[3][];

jaggedArray を使用する前に、その要素を初期化する必要があります。Before you can use jaggedArray, its elements must be initialized. 次のように要素を初期化することができます。You can initialize the elements like this:

jaggedArray[0] = new int[5];
jaggedArray[1] = new int[4];
jaggedArray[2] = new int[2];

各要素は、整数の 1 次元配列です。Each of the elements is a single-dimensional array of integers. 最初の要素は 5 つの整数の配列で、2 番目の要素は 4 つの整数の配列であり、3 番目の要素は 2 つの整数の配列です。The first element is an array of 5 integers, the second is an array of 4 integers, and the third is an array of 2 integers.

初期化子を使って配列の要素に値を格納することもできます。この場合、配列のサイズは不要です。It is also possible to use initializers to fill the array elements with values, in which case you do not need the array size. 例:For example:

jaggedArray[0] = new int[] { 1, 3, 5, 7, 9 };
jaggedArray[1] = new int[] { 0, 2, 4, 6 };
jaggedArray[2] = new int[] { 11, 22 };

次のように宣言時に配列を初期化することもできます。You can also initialize the array upon declaration like this:

    int[][] jaggedArray2 = new int[][] 
{
    new int[] {1,3,5,7,9},
    new int[] {0,2,4,6},
    new int[] {11,22}
};

次の短い形式を使用できます。You can use the following shorthand form. 要素の既定の初期化はないので、new 演算子を要素の初期化から省略することはできません。Notice that you cannot omit the new operator from the elements initialization because there is no default initialization for the elements:

    int[][] jaggedArray3 = 
{
    new int[] {1,3,5,7,9},
    new int[] {0,2,4,6},
    new int[] {11,22}
};

ジャグ配列は配列の配列です。そのため、配列要素は参照型で、null に初期化されます。A jagged array is an array of arrays, and therefore its elements are reference types and are initialized to null.

これらの例のように配列の各要素にアクセスできます。You can access individual array elements like these examples:

// 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;

ジャグ配列と多次元配列を混在させることができます。It is possible to mix jagged and multidimensional arrays. 異なるサイズの 3 つの 2 次元の配列要素を含む 1 次元のジャグ配列の宣言と初期化を次に示します。The following is a declaration and initialization of a single-dimensional jagged array that contains three two-dimensional array elements of different sizes. 2 次元配列の詳細については、「多次元配列」を参照してください。For more information about two-dimensional arrays, see Multidimensional Arrays.

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) が表示されます。You can access individual elements as shown in this example, which displays the value of the element [1,0] of the first array (value 5):

System.Console.Write("{0}", jaggedArray4[0][1, 0]);

メソッド Length は、ジャグ配列に含まれる配列の数を返します。The method Length returns the number of arrays contained in the jagged array. たとえば、前の配列を宣言し、次のコマンド ラインを実行したとします。For example, assuming you have declared the previous array, this line:

System.Console.WriteLine(jaggedArray4.Length);

この場合は値 3 が返されます。returns a value of 3.

Example

この例では、要素自体が配列である配列を構築します。This example builds an array whose elements are themselves arrays. 配列の要素のそれぞれのサイズが異なります。Each one of the array elements has a different size.

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
*/

参照See Also