@PatriotSY

Как изменить двумерный массив в for?

Пытаюсь изменить двумерный массив - добавить значение. Но т.к. все передается по значению, естественно этого не могу сделать. Пытался написать что-то типа такого:
for _, *innerArray := range &arr {
    innerArray = append(innerArray, "ddddd")
}

Но так нельзя делать)) Как правильно добавить значение во вложенный массив? Код для примера:

package main

import "fmt"

func main() {
	var arr = [][]string{{"el1"}, {"el1", "el2"}, {}}

	for _, innerArray := range arr {
		fmt.Printf("len: %d\n", len(innerArray))
	}

	fmt.Println("----------")

	for _, innerArray := range arr {
		innerArray = append(innerArray, "ddddd")
	}

	for _, innerArray := range arr {
		fmt.Printf("len: %d\n", len(innerArray))
	}
}
  • Вопрос задан
  • 242 просмотра
Решения вопроса 1
WinPooh32
@WinPooh32
Stack Overflow answer searching expert
....  
 for i, _ := range arr {
    arr[i] = append(arr[i], "ddddd")
  }
....

В вашем случае innerArray это срез, который внутри содержит указатель на массив, но когда вы делаете append и при этом size выходит за пределы capacity, то выделяется новый массив и в него добавляется новое значение.

К тому же innerArray это локальная переменная в виде среза, которая доступна лишь в пределах цикла.
Присваивая новое значение в нее из append() вы не меняете значение переменной среза в массиве, а новый срез из аппенда уже указывает на другой массив с добавленным элементом.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы