3

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

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

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

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

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

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

4

1 回答 1

2

当您通过调用ParallelIterator从 a创建一个时,它同时也是一个,因此您可以调用它来获取项目索引,如下所示:Vecpar_iter()IndexedParallelIteratorenumerate()

// 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);
    });
}

操场

于 2021-01-10T17:51:39.043 回答