此代码有效:
let stdin = std::io::stdin();
let mut rdr = csv::Reader::from_reader(stdin);
let mut hmap = HashMap::<String, u64>::new();
rdr.records()
.map(|r| r.unwrap())
.fold((), |_, item| {
// TODO: Is there a way not to have to copy item[col] every time?
let counter = hmap.entry(item[col].to_string()).or_insert(0);
*counter += 1;
});
Run Code Online (Sandbox Code Playgroud)
此代码失败并显示消息:"无法移出,acc因为它是借用的"
let stdin = std::io::stdin();
let mut rdr = csv::Reader::from_reader(stdin);
let hmap = rdr.records()
.map(|r| r.unwrap())
.fold(HashMap::<String, u64>::new(), |mut acc, item| {
// TODO: Is there a way not to have to copy …Run Code Online (Sandbox Code Playgroud) 我想计算字符串中每个字母的出现次数。目标是建立一个HashMap<char,i32>键是字符串中的所有字符而值是出现次数的地方。
假设我正在遍历char字符串或输入文件中的值。对于 each char,如果还没有遇到过,我需要将它HashMap作为一个值为 1 的新键添加到 中,但是如果之前已经看到过,我需要增加该值。
这是有效的代码。请耐心等待,我对 Rust 很陌生:
use std::collections::HashMap;
fn main() {
let mut letter_counts: HashMap<char,i32> = HashMap::new();
let input_string = "Hello, world!";
let char_vec: Vec<char> = input_string.to_lowercase().chars().collect();
for c in char_vec {
if let Some(x) = letter_counts.get_mut(&c) {
*x = *x + 1;
} else {
letter_counts.insert(c,1);
}
}
println!("{:?}",letter_counts);
}
Run Code Online (Sandbox Code Playgroud)
我想知道的是,在 Rust 中是否有一种惯用的方法来做到这一点?通过惯用语,我的意思是有一个标准库类型(如 Python 的defaultdict),或 HashMap 上的一个方法(如 Java 的HashMap.computeIfAbsent),可以使这个更简单,更清晰,和/或比我所做的手动编码算法更不容易出错?