cpp

Многомерные слайсы

Слайсы в языке Go могут быть многомерными. Объявление многомерного слайса имеет следующий формат:

var <Переменная> [][]...[]<Тип>

На практике наиболее часто используются двумерные слайсы, позволяющие хранить значения ячеек таблицы, содержащей определенное количество строк и столбцов. Объявление двумерного слайса выглядит так:

var <Переменная> [][]<Тип>

При инициализации двумерного слайса элементы указываются внутри фигурных скобок через запятую. Элементы одной строки следует также разместить внутри фигурных скобок. Пример:

arr := [][]int{
   {1, 2, 3, 4},
   {5, 6, 7, 8},
}
fmt.Println(arr)       // [[1 2 3 4] [5 6 7 8]]

Получить или задать значение элемента можно указав два индекса (не забывайте, что нумерация начинается с нуля):

arr := [][]int{
   {1, 2, 3, 4},
   {5, 6, 7, 8},
}
fmt.Println(arr[0][0]) // 1
fmt.Println(arr[1][0]) // 5
fmt.Println(arr[1][3]) // 8

Пример создания многомерного слайса с помощью функции make():

arr := make([][]int, 2)
arr[0] = make([]int, 4)
arr[1] = make([]int, 4)
fmt.Println(arr)       // [[0 0 0 0] [0 0 0 0]]

Количество элементов внутри вложенных слайсов может быть разным. Это позволяет создавать так называемые зубчатые многомерные слайсы:

arr := make([][]int, 3)
arr[0] = make([]int, 4)
arr[1] = make([]int, 3)
arr[2] = make([]int, 2)
fmt.Println(arr)       // [[0 0 0 0] [0 0 0] [0 0]]

Чтобы вывести все значения слайса необходимо использовать вложенные циклы. В качестве примера пронумеруем все элементы слайса, а затем выведем все значения:

arr := make([][]int, 2)
arr[0] = make([]int, 4)
arr[1] = make([]int, 4)
n := 1
// Нумеруем все элементы слайса
for i := 0; i < len(arr); i++ {
   for j := 0; j < len(arr[i]); j++ {
      arr[i][j] = n
      n++
   }
}
// Выводим значения
for i := 0; i < len(arr); i++ {
   for j := 0; j < len(arr[i]); j++ {
      fmt.Print(arr[i][j], " ")
   }
   fmt.Println()
}
for _, row := range arr {
   for _, value := range row {
      fmt.Print(value, " ")
   }
   fmt.Println()
}

Результат:

1 2 3 4
5 6 7 8
1 2 3 4
5 6 7 8

Пример объявления указателя на двумерный слайс:

arr := [][]int{
   {1, 2, 3, 4},
   {5, 6, 7, 8},
}
var p *[][]int = &arr
fmt.Println((*p)[0][0])       // 1

Учебник Go (Golang)
Учебник Go (Golang) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp