Многомерные массивы
Кроме одномерных массивов мы можем определять и многомерные массивы, которые можно определить как массивы массива. Многомерный массив можно разбить на несколько одномерных массивов. В таких массивах данные хранятся в табличной форме (порядок по строкам). Размер многомерного массива определяется его размерами, которые равны произведению размеров всех размерностей.
Многомерные массивы объявляются следующим образом:
Имя_массива := [размерность_1][размерность_2]..тип_массива{значения_массива}
Количество квадратных скобок указывает количество размерностей массива. Простейшее определение двухмерного массива:
package main
import "fmt"
func main() {
numbers := [3][2] int {
{1, 2},
{4, 5},
{7, 8},
}
fmt.Println(numbers) // [[1 2] [4 5] [7 8]]
}
В данном случае numbers представляет двумерный массив (с двумя размерностями) размером 3x2. Объявление массива (numbers := [3][2] int) означает, что он содержит три одномерных массива, где каждый одномерный массив имеет длину в два элемента.
Как и в случае с одномерными массивами, нет необходимости инициализировать многомерный массив всеми элементами. Неинициализированные элементы массивов получают значения по умолчанию. Например:
numbers := [3][2] int {
{1, 2},
{5},
}
fmt.Println(numbers) // [[1 2] [5 0] [0 0]]
Для обращения к элементам многомерного массива применяются индексы, причем для каждой размерности указывается свой индекс. Например:
package main
import "fmt"
func main() {
var numbers [3] [2] int
numbers[0] = [2] int {1, 2}
numbers[1] = [2] int {4, 5}
numbers[2] = [2] int {7, 8}
fmt.Println(numbers) // [[1 2] [4 5] [7 8]]
}
В данном случае numbers представляет набор из 3 массивов, каждый из который содержит по 2 элемента. Для инициализации каждого подмассива применяем соответствующий индекс. Например, инициализация самого первого подмассива:
numbers[0] = [2] int {1, 2}
Фактически каждый такой подмассив представляет строку в таблице. А каждый элемент такого подмассива - столбец.
Также мы могли бы обратиться к конкретному элементу, используя оба индекса:
package main
import "fmt"
func main() {
var numbers [3] [2] int
numbers[0][0] = 1
numbers[0][1] = 2
numbers[1][0] = 4
numbers[1][1] = 5
numbers[2][0] = 7
numbers[2][1] = 8
fmt.Println(numbers) // [[1 2] [4 5] [7 8]]
}