在Rust中使用Index trait和HashMap

时间:2017-06-02 10:39:15

标签: hashmap rust

为了测试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

我做错了什么?我该如何修复这个例子?

1 个答案:

答案 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;
}