我有一个HashMap,想使用rayon并行迭代它的值。我不能使用它,而且首先从值创建Vec是不可行的。有没有人知道如何做到这一点?
HashMap
rayon
Vec
r3i60tvu1#
有没有人知道如何做到这一点?Rayon为&HashMap实现了IntoParallelIterator。所以你可以在导入了rayon的prelude的hashmap上调用par_iter,它就会工作:https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=e710e23bcc99bd09ce4fab5ba7544604
&HashMap
IntoParallelIterator
par_iter
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); }
1条答案
按热度按时间r3i60tvu1#
有没有人知道如何做到这一点?
Rayon为
&HashMap
实现了IntoParallelIterator
。所以你可以在导入了rayon的prelude的hashmap上调用
par_iter
,它就会工作:https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=e710e23bcc99bd09ce4fab5ba7544604