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

更新 : 2007 年 11 月

ジャグ配列とは、その要素も配列である配列です。ジャグ配列の要素は、次元やサイズが異なっていてもかまいません。ジャグ配列は、"配列の配列" と呼ばれることもあります。次の例で、ジャグ配列の宣言、初期化、アクセスの各方法について説明します。

次に示すのは、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 次元配列です。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;

ジャグ配列と多次元配列を併用できます。次に示すのは、サイズが異なる 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
*/

参照

概念

C# プログラミング ガイド

参照

配列 (C# プログラミング ガイド)

1 次元配列 (C# プログラミング ガイド)

多次元配列 (C# プログラミング ガイド)

Array