Перейти к основному содержимому

Многомерные массивы

Кроме одномерных массивов мы можем определять и многомерные массивы, которые можно определить как массивы массива. Многомерный массив можно разбить на несколько одномерных массивов. В таких массивах данные хранятся в табличной форме (порядок по строкам). Размер многомерного массива определяется его размерами, которые равны произведению размеров всех размерностей.

Многомерные массивы объявляются следующим образом:

Имя_массива := [размерность_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]]
}