Параметр-карта функции в Rust
Давайте теперь будем передавать карту в функцию по ссылке. Карту обычно передают так, чтобы не забирать владение и оставить ее снаружи. Для типа из стандартной библиотеки в начале файла подключают модуль.
Прочитаем значение по ключу через ссылку на карту:
use std::collections::HashMap;
fn func(scores: &HashMap<String, i32>, key: &str) -> i32 {
let mut out = 0;
for (k, v) in scores.iter() {
if k.as_str() == key {
out = *v;
}
}
out
}
fn main() {
let mut map = HashMap::new();
map.insert("ann".to_string(), 20);
let age = func(&map, "ann");
println!("{}", age);
println!("{}", map.len());
}
На экране 20 и 1. Переменная map по-прежнему
доступна в точке входа.
Проверим наличие ключа без изменения карты:
use std::collections::HashMap;
fn func(data: &HashMap<String, i32>, key: &str) -> bool {
data.contains_key(key)
}
fn main() {
let mut map = HashMap::new();
map.insert("go".to_string(), 1);
println!("{}", func(&map, "go"));
println!("{}", func(&map, "sql"));
}
Дана карта:
use std::collections::HashMap;
let mut map = HashMap::new();
map.insert("a".to_string(), 3);
Напишите блок со ссылкой на карту, который отдает длину, и выведите результат.
Дан следующий код:
use std::collections::HashMap;
fn main() {
let mut m = HashMap::new();
m.insert("x".to_string(), 9);
let ok = func(&m);
println!("{}", ok);
}
Допишите func с параметром-ссылкой и проверкой ключа
"x".
Скажите, зачем в начале файла пишут use для карты.