Массивы массивов (Руководство по программированию на 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.

Ниже объявляется одномерный массив из трех элементов, каждый из которых является одномерным массивом целых чисел: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];

Каждый элемент представляет собой одномерный массив целых чисел.Each of the elements is a single-dimensional array of integers. Первый из них содержит 5 целых чисел, второй — 4, а третий — 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. Ниже показаны объявление и инициализация одномерного массива массивов, элементами которого являются двухмерные массивы разного размера.The following is a declaration and initialization of a single-dimensional jagged array that contains three two-dimensional array elements of different sizes. Дополнительные сведения о двумерных массивах см. в разделе Многомерные массивы.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