English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C# Основной учебник

C# Уровень продвинутый учебник

C# Ориентирован на объекты (OOP)

C# Jagged Arrays

Jagged arrays are arrays of arrays. Jagged arrays store arrays rather than literal values. For example, a two-dimensional array is a one-dimensional array of the same elements, but a jagged array, the number of elements in each array below is different.

Jagged arrays initializes with two square brackets [][] . The first bracket specifies the size of the array, the second bracket specifies the size of the arrays to be stored.

Ниже приведен пример declarations of jagged arrays.

int[][] jArray1 = new int[2][]; // может содержать до двух одномерных массивов 
int[][,] jArray2 = new int[3][,]; // может содержать до трех двумерных массивов

В примере выше, jArray1 может хранить до двух одномерных массивов. jArray2 может хранить до трех двумерных массивов, массив [][] определяет двумерный массив.

int[][] jArray = new int[2][]; 
jArray[0] = new int[3]{1, 2, 3};
jArray[1] = new int[4]{4, 5, 6, 7};

Вы также можете инициализировать структурированный массив при его определении, как показано ниже.

int[][] jArray = new int[2][]{
                new int[3]{1, 2, 3},
                new int[4]{4, 5, 6, 7}
            };
jArray[0][0]; //возвращает 1
jArray[0][1]; //возвращает 2
jArray[0][2]; //возвращает 3
jArray[1][0]; //возвращает 4
jArray[1][1]; //возвращает 5
jArray[1][2]; //возвращает 6
jArray[1][3]; //возвращает 7

Для доступа к структурированному массиву можно использовать два цикла for, как показано ниже.

int[][] jArray = new int[2][]{
                new int[3]{1, 2, 3},
                new int[4]{4, 5, 6, 7}
            };
for(int i=0; i<jArray.Length; i++)
{
	for(int j=0; j < (jArray[i]).Length; j++)
		Console.WriteLine(jArray[i][j]);
}

Ниже приведен пример структурирования массива, где вторая скобка [ ] указывает на двумерный массив.

int[][,] jArray = new int[2][,];
jArray[0] = new int[3, 2] { { 1, 2 }, { 3, 4 }, { 5, 6 } };
jArray[1] = new int[2, 2] { { 7, 8 }, { 9, 10 } }; 
jArray[0][1, 1]; //возвращает 4
                                             
jArray[1][1, 0]; //возвращает 9
                                             
jArray[1][1, 1]; //возвращает 10

Если добавить еще одну скобку, то это будет массив массивов.

int[][][] intJaggedArray = new int[2][][] 
                            {
                                new int[2][]  
                                { 
                                    new int[3] { 1, 2, 3},
                                    new int[2] { 4, 5} 
                                },
                                new int[1][]
                                { 
                                    new int[3] { 7, 8, 9}
                                }
                            };
Console.WriteLine(intJaggedArray[0][0][0]); // 1
Console.WriteLine(intJaggedArray[0][1][1]); // 5
    
Console.WriteLine(intJaggedArray[1][0][2]); // 9

В примере с перекрестными массивами, три квадратных скобки [] [] [] представляют собой массивы массивов. Таким образом, intJaggedArray будет содержать два элемента, что означает два массива. В каждом массиве также содержится один массив (одномерный). intJaggedArray[0][0][0] указывает на первый элемент первого внутреннего массива. intJaggedArray[1][0][2] указывает на третий элемент второго внутреннего массива. Это показано на следующем рисунке.

Зубчатые массивы