Цикл по многомерным комбинациям в Go
Массив срезов
Внешний цикл идет по ячейкам массива, внутренний - по элементам среза. Сумму копят с нуля:
rows := [2][]int{{1, 2}, {3, 4, 5}}
sum := 0
for i := 0; i < len(rows); i++ {
for j := 0; j < len(rows[i]); j++ {
fmt.Println(rows[i][j])
sum += rows[i][j]
}
}
fmt.Println(sum) // выведет 15
Карта срезов
Внешний цикл дает срез по очередному ключу, внутренний проходит его элементы. Порядок ключей не обещан:
data := map[string][]int{
"a": {1, 2},
"b": {3, 4},
}
sum := 0
for _, row := range data {
for _, val := range row {
fmt.Println(val)
sum += val
}
}
fmt.Println(sum) // выведет 10
Срез карт
Внешний цикл выбирает карту по индексу, внутренний складывает значения ее пар:
table := []map[string]int{
{"a": 1, "b": 2},
{"a": 3, "b": 4},
}
sum := 0
for i := 0; i < len(table); i++ {
for _, val := range table[i] {
fmt.Println(val)
sum += val
}
}
fmt.Println(sum) // выведет 10
Дан массив срезов:
rows := [2][]int{{10, 20}, {30}}
Найдите сумму всех чисел и выведите ее.
Дана карта срезов:
data := map[string][]int{
"Ann": {5, 4, 5},
"Bob": {3, 5, 4},
}
Найдите сумму всех оценок и выведите ее.
Дан срез карт:
table := []map[string]int{
{"a": 10, "b": 20},
{"a": 30, "b": 40},
}
Найдите сумму всех чисел и выведите ее.