Правка в цикле в Rust
Существующие ключи меняют повторной записью в цикле. Сначала запоминают все ключи в списке, затем для каждого имени читают число и кладут новое по тому же ключу. Новые ключи внутри такого цикла в учебных задачах не добавляют.
Удвоим каждое значение в маленькой карте:
use std::collections::HashMap;
fn main() {
let mut room = HashMap::new();
room.insert("a", 1);
room.insert("b", 2);
let keys: Vec<&str> = room.keys().copied().collect();
for k in keys {
let v = room[k];
room.insert(k, v * 2);
}
println!("{}", room["a"]);
println!("{}", room["b"]);
}
После цикла "a" дает 2, "b"
дает 4. Набор ключей тот же, что до цикла.
Менять можно выборочно:
use std::collections::HashMap;
fn main() {
let mut ages = HashMap::new();
ages.insert("ann", 20);
ages.insert("bob", 30);
let keys: Vec<&str> = ages.keys().copied().collect();
for k in keys {
let v = ages[k];
if v < 25 {
ages.insert(k, v + 1);
}
}
println!("{}", ages["ann"]);
}
Дана следующая карта:
let mut grid = HashMap::new();
grid.insert("x", 3);
grid.insert("y", 5);
Прибавьте 10 к каждому значению через
повторную запись по каждому ключу. Выведите
значения по обоим именам.
Дана следующая карта:
let mut trio = HashMap::new();
trio.insert("a", 1);
trio.insert("b", 2);
trio.insert("c", 3);
Обнулите все значения в цикле, не убирая ключи. Выведите длину.
Дана следующая карта:
let mut tags = HashMap::new();
tags.insert("a1", 1);
tags.insert("b2", 2);
tags.insert("a3", 3);
Замените значения на 0 только для
ключей, первый символ которых "a".