【问题标题】:How to iterate with enumeration using rayon?如何使用人造丝进行枚举迭代?
【发布时间】:2021-01-10 17:32:29
【问题描述】:

我可以迭代和处理索引和变量,例如:

let x = vec![5, 6, 7, 8];

for (index, val) in x.iter().enumerate() {
    println!("{} {}", val, index);
}

现在有了人造丝,据我所知,通过par_iter() 的并行迭代不支持枚举,因为它有ParallelIterator

Rayon 似乎有 IndexedParallelIterator,但我不知道如何使用它来产生与上面显示的简单 for 循环类似的结果。

在并行迭代时是否要跟踪每个值的索引?简单的 for 循环会是什么样子?

【问题讨论】:

    标签: multithreading for-loop rust iterator rayon


    【解决方案1】:

    当您通过调用par_iter()Vec 创建ParallelIterator 时,它同时也是一个IndexedParallelIterator,因此您可以在其上调用enumerate() 以获取项目索引,如下所示:

    // rayon = "1.5"
    use rayon::prelude::*;
    
    fn main() {
        let x = vec![5, 6, 7, 8];
        x.par_iter().enumerate().for_each(|(index, val)| {
            println!("{} {}", val, index);
        });
    }
    

    playground

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      • 2017-02-03
      • 2018-08-29
      • 2013-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多