Основы языка C# 2005. Евсеева О.Н - 101 стр.

UptoLike

Составители: 

105
рассматривать как одномерный массив, элементы которого являются
массивами, элементы которых, в свою очередь, снова могут быть массивами, и
так может продолжаться до некоторого уровня вложенности.
В каких ситуациях может возникать необходимость в таких структурах
данных? Эти массивы могут применяться для представления деревьев, у
которых узлы могут иметь произвольное число потомков. Таковым может быть,
например, генеалогическое дерево. Вершины первого уровняFathers,
представляющие отцов, могут задаваться одномерным массивом, так что
Fathers[i]это i-й отец. Вершины второго уровня представляются массивом
массивовChildren, так что Children[i]это массив детей i-го отца, а Children[i][j]
это j-й ребенок i-го отца. Для представления внуков понадобится третий
уровень, так что GrandChildren[i][j][k] будет представлять к-го внука j-го ребенка
i-го отца.
Есть некоторые особенности в объявлении и инициализации таких
массивов. Если при объявлении типа многомерных массивов для указания
размерности использовались запятые, то для изрезанных массивов применяется
более ясная символикасовокупности пар квадратных скобок; например,
int[ ][ ] задает массив, элементы которогоодномерные массивы элементов типа
int.
Сложнее с созданием самих массивов и их инициализацией. Здесь нельзя
вызвать конструктор new int[3][5], поскольку он не задает изрезанный массив.
Фактически нужно вызывать конструктор для каждого массива на самом
нижнем уровне. В этом и состоит сложность объявления таких массивов.
Начнем с формального примера:
//массив массивов - формальный пример
//объявление и инициализация
int[ ][ ] jagger = new int[3][ ]
{
new int[ ] {5, 7, 9, 11},
new int[ ] {2, 8},
new int[ ] {6, 12, 4}
};
Массив jagger имеет всего два уровня. Можно считать, что у него три
элемента, каждый из которых является массивом. Для каждого такого массива
необходимо вызвать конструктор new, чтобы создать внутренний массив. В
данном примере элементы внутренних массивов получают значение, будучи
явно инициализированы константными массивами. Конечно, допустимо и такое
объявление:
int[ ][ ] jagger1 = new int[3][ ]
{
new int[4],
new int[2],
new int[3]