And*_*eux 4 iterator immutability rust
我正在进行一项练习练习,其中我需要反转拼字游戏分数的地图; 得分地图=>字母成为字母地图=>得分.我想出了以下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()
}
Run Code Online (Sandbox Code Playgroud)
这有效,但事后我意识到它不应该.h
是一个不可变的引用.h.iter()
迭代对其条目的引用,该条目应具有类型(&i32, &Vec<char>)
,但随后我将Vec
使用它并使用它into_iter()
.Rust并没有抱怨,尽管它是一个不可改变的引用.
我在这里错过了什么?
输入问题后,我想出了答案.IntoIterator
为实现Vec
,也为&Vec
和&mut Vec
.Vec
它消耗引用并迭代对其元素的引用,而不是消耗它.非常简单的行为,但我设法以最混乱的方式做到这一点.