Изменение значений в цикле в Go
Значение уже существующего ключа можно заменить
прямо в цикле. Запись идет через имя карты
и переменную ключа из цикла: m[k] = ....
Так обновляют все числа или только часть по условию.
Удвоим каждое значение в маленькой карте:
room := map[string]int{"a": 1, "b": 2}
for k, v := range room {
room[k] = v * 2
}
fmt.Println(room["a"])
fmt.Println(room["b"])
После цикла "a" дает 2, "b"
дает 4. Новые ключи в этом примере
не добавляют: набор ключей тот же, что до цикла.
Менять можно выборочно:
ages := map[string]int{"ann": 20, "bob": 30}
for k, v := range ages {
if v < 25 {
ages[k] = v + 1
}
}
fmt.Println(ages["ann"])
Только "ann" получил 21. Добавление
нового ключа внутри range по той же карте
в учебных задачах не используют: поведение
обхода от этого может запутаться.
Дана следующая карта:
grid := map[string]int{"x": 3, "y": 5}
Прибавьте 10 к каждому значению через
запись по k. Выведите значения по
обоим ключам.
Дана следующая карта:
trio := map[string]int{"a": 1, "b": 2, "c": 3}
Обнулите все значения в цикле, не удаляя ключи. Выведите длину.
Дана следующая карта:
tags := map[string]string{"a1": "go", "b2": "book", "a3": "lang"}
Замените значения на "*" только для
ключей, начинающихся с "a".