为了测试Index
特征,我编码了一个直方图。
use std::collections::HashMap;
fn main() {
let mut histogram: HashMap<char, u32> = HashMap::new();
let chars: Vec<_> = "Lorem ipsum dolor sit amet"
.to_lowercase()
.chars()
.collect();
for c in chars {
histogram[c] += 1;
}
println!("{:?}", histogram);
}
测试代码here。
但我得到以下类型错误expected &char, found char
。如果我使用histogram[&c] += 1;
,我会得到cannot borrow as mutable
。
我做错了什么?我该如何修复这个例子?
答案 0 :(得分:4)
HashMap
仅实施Index
(而不是IndexMut
):
fn index(&self, index: &Q) -> &V
所以你不能改变histogram[&c]
,因为返回的引用&V
是不可变的。
您应该使用entry API代替:
for c in chars {
let counter = histogram.entry(c).or_insert(0);
*counter += 1;
}