rust - 为什么无法使用方括号 [ ] 表示法更新 HashMap 中的值?

标签 rust hashmap updating

我用 Rust 编写了一个“计算字符串中所有字符出现次数”的函数,但是更新/添加值不适用于括号表示法。 这是为什么?

有效的方法是:

use std::collections::HashMap;

fn main() {
    let myString = "Go ahead and count all my characters";

    let mut myMap = HashMap::new();

    for ch in myString.chars() {
        *myMap.entry(ch).or_insert(0) += 1;
    }
}

不起作用的是:

for ch in myString.chars() {
    myMap.entry(ch).or_insert(0);
    *myMap[&ch] += 1;
}

在后一种情况下,编译器会提示:

error[E0614]: type `{integer}` cannot be dereferenced
  --> src/main.rs:10:9
   |
10 |         *myMap[&ch] += 1;
   |         ^^^^^^^^^^^

这是有道理的,因为它们被复制并存储在堆栈中(如果我理解正确的话),但是如果您不尝试取消引用该值,您也无法向它们添加 1。看起来第一个版本是我唯一的选择;那是对的吗?为什么它在那里工作?

最佳答案

在 Rust 中,运算符可以通过 standard operator traits 重载。 。 索引运算符(有时称为下标运算符)有两种类型:IndexIndexMut 。如果您正在查看 HashMap 的文档它只实现了前者,因此无法修改返回的引用值。

关于rust - 为什么无法使用方括号 [ ] 表示法更新 HashMap 中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56588085/

相关文章:

c++ - 对 C++ 应用程序进行更新和修改

arrays - 如何在 Swift 4.0 中使用 WritableKeyPath 更新数组

android - self 更新应用

rust - 结果得到意外的类型参数

Java:多对一双向查找

hashmap - 八叉树的动态 HashMap

java - 在 Java 中使用 HashMap 打印出重复的字符串

rust - 为什么闭包的可变引用参数不会比函数调用更长久?

rust - 调用外部包中定义的宏时未解析的导入

rust - 生成 rustdoc 时如何使用本地文件作为 crate Logo ?