В предыдущих страницах мы работали с одномерными массивами. Их можно визуализировать как строку значений. У каждого значения в строке есть свой порядковый номер. Иногда этого недостаточно, тогда мы можем сделать N мерные массивы. N мерные они потому, что у них индекс элемента состоит не из одного, а из N значений.
Например, двумерные массивы можно визуализировать как таблицу, тогда каждое значение будет находиться на какой-то строке в каком-то столбце. Также можно сказать, что мы создадим двумерное поле и каждый элемент будет иметь позицию по X и Y.
Для получения длины измерения можно использовать метод GetLength, который принимает номер измерения. Для двумерного массива 3×4, длина первого измерения будет равна трем, а второго четырем.
Фрагмент 1.16
int[,] map = new int[3, 3];
map[0, 0] = 1;
map[1, 0] = 1;
map[2, 0] = 1;
map[0, 1] = 1;
map[2, 1] = 1;
map[0, 2] = 1;
map[1, 2] = 1;
map[2, 2] = 1;
for(int x = 0; x < map.GetLength(0); x++)
{
for(int y = 0;y < map.GetLength(1); y++)
{
Console.Write(map[x,y]);
}
Console.WriteLine();
}
В результате у нас будет примерно такая таблица (матрица).
1 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Массивы массивов
Как я предполагаю, вы уже догадались, что в качестве типа элементов массива может быть тип массива. В таком случае мы получим массив массивов или кортеж.
Один из атрибутов N-мерных массивов – это их ровность. Т.е в каждой строке будет одинаковое количество столбцов. В случае с массивами массивов это может быть не так.
Фрагмент 1.17
string[][] street = new string[][]
{
new string[] { "Mary", "Thomas" },
new string[] { "Carl" },
new string[] { "Bob", "Jhonatan", "Alex" }
};
for(int i = 0; i < street.Length; i++)
{
Console.WriteLine($"Дома {i}:");
for(int p = 0; p < street[i].Length; p++)
{
Console.WriteLine(street[i][p]);
}
}