Я делаю упражнение, в котором мне нужно инвертировать карту результатов скрэббл;карта баллов => букв становится картой букв => баллов.Я придумал следующий код Rust:
use std::collections::BTreeMap;
pub fn transform(h: &BTreeMap<i32, Vec<char>>) -> BTreeMap<char, i32> {
h.iter()
.flat_map(|(&score, letters)| {
letters
.into_iter()
.map(move |l| (l.to_ascii_lowercase(), score))
})
.collect()
}
Это работает, но потом я понял, что не должно.h
является неизменной ссылкой.h.iter()
перебирает ссылки на свои записи, которые должны иметь тип (&i32, &Vec<char>)
, но затем я беру Vec
и потребляю его с into_iter()
.Руст не жалуется, несмотря на то, что он является неизменной ссылкой.
Что мне здесь не хватает?