You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rust中用rayon并行遍历HashMap(不消耗/转Vec)

问题

我拥有一个HashMap,希望使用rayon对其值进行并行遍历。但我不能消耗该HashMap,且将其值先转换为Vec的方案不可行。请问有可行的解决办法吗?

回答

当然可以实现,Rayon 为标准库的集合类型提供了扩展的并行迭代器方法,直接基于HashMap的引用就能完成并行遍历,完全不需要消耗原HashMap或者额外转换为Vec。

基础使用示例

首先确保你的Cargo.toml中添加了Rayon依赖:

[dependencies]
rayon = "1.8"

然后通过par_iter()方法获取并行迭代器,它会返回HashMap键值对的引用,不会改动原集合:

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

fn main() {
    let my_map: HashMap<&str, u32> = [("foo", 1), ("bar", 2), ("baz", 3)].into();

    // 并行遍历所有键值对
    my_map.par_iter().for_each(|(key, val)| {
        println!("Key: {}, Value: {}", key, val);
    });

    // 如果只需要处理值,直接提取即可
    my_map.par_iter()
        .map(|(_, val)| *val)
        .for_each(|val| {
            println!("Processed value: {}", val);
        });
}

可变并行遍历

如果需要对HashMap的值进行修改,只需持有可变引用并调用par_iter_mut():

// 给所有值加1
my_map.par_iter_mut().for_each(|(_, val)| {
    *val += 1;
});

这种方式直接复用原HashMap的内存,没有额外的拷贝或转换开销,完美匹配你的需求。


内容的提问来源于stack exchange,提问作者Lukas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 03:47:04