我用 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 重载。 。 索引运算符(有时称为下标运算符)有两种类型:Index
和 IndexMut
。如果您正在查看 HashMap
的文档它只实现了前者,因此无法修改返回的引用值。
关于rust - 为什么无法使用方括号 [ ] 表示法更新 HashMap 中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56588085/