如何在Rust中并行迭代HashMap?

u7up0aaq  于 2023-04-06  发布在  其他
关注(0)|答案(1)|浏览(198)

我有一个HashMap,想使用rayon并行迭代它的值。我不能使用它,而且首先从值创建Vec是不可行的。
有没有人知道如何做到这一点?

r3i60tvu

r3i60tvu1#

有没有人知道如何做到这一点?
Rayon为&HashMap实现了IntoParallelIterator
所以你可以在导入了rayon的prelude的hashmap上调用par_iter,它就会工作:https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=e710e23bcc99bd09ce4fab5ba7544604

use std::collections::HashMap;
use rayon::prelude::*;

fn main() {
    let h = HashMap::from([
        ("foo", 1),
        ("bar", 2),
        ("baz", 3),
        ("qux", 4),
        ("quux", 5),
    ]);
    thing(&h);
}

fn thing(m: &HashMap<&str, usize>) {
    let v: usize = m.par_iter()
        .map(|(_, v)| *v)
        .sum();
    println!("{}", v);
}

相关问题