此函数使用Vec<i32>
计算HashMap
的模式,以计数每个值的出现次数。我不明白为什么除非在最后一行中两次引用该键,否则为什么它不会编译:
fn mode(vec: &Vec<i32>) -> i32 {
let mut counts = HashMap::new();
for n in vec {
let count = counts.entry(n).or_insert(0);
*count += 1;
}
**counts.iter().max_by_key(|a| a.1).unwrap().0
}
答案 0 :(得分:2)
它必须被取消引用两次,因为您已经创建了一个双重引用。
&Vec<T>
的produces &T
。HashMap::iter
的HashMap<K, V>
上致电了produces (&K, &V)
。fn mode(vec: &[i32]) -> i32 {
let mut counts = std::collections::HashMap::new();
for &n in vec {
*counts.entry(n).or_insert(0) += 1;
}
counts.into_iter().max_by_key(|a| a.1).unwrap().0
}
另请参阅: