以下是一个使用par_iter
和par_extend
的解决方案示例:
use rayon::prelude::*;
fn main() {
let mut data = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let mut results = vec![];
// 使用par_iter并行迭代处理数据
data.par_iter().for_each(|&num| {
let result = process_data(num);
results.push(result);
});
println!("Results: {:?}", results);
}
fn process_data(num: i32) -> i32 {
// 在这里进行数据处理,这里只是一个示例
num * 2
}
在上面的代码中,首先创建了一个数据向量data
和一个结果向量results
。然后使用par_iter
方法对data
进行并行迭代处理。在迭代过程中,对每个元素调用process_data
函数进行处理,并将结果存储在results
向量中。最后,打印出所有处理的结果。
请注意,rayon
crate 需要在Cargo.toml
文件中添加依赖项:
[dependencies]
rayon = "1.5"
使用par_extend
方法时,可以使用以下代码示例:
use rayon::prelude::*;
fn main() {
let mut data = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let mut results = vec![];
// 创建一个空的向量,用于存储结果
let mut processed_data = vec![];
// 使用par_extend并行处理数据并将结果添加到processed_data
data.par_extend(|&num| {
let result = process_data(num);
Some(result)
});
// 将processed_data中的结果转移到results中
results.extend(processed_data.into_iter());
println!("Results: {:?}", results);
}
fn process_data(num: i32) -> i32 {
// 在这里进行数据处理,这里只是一个示例
num * 2
}
在上面的代码中,首先创建了一个数据向量data
和一个结果向量results
。然后创建了一个空的向量processed_data
,用于存储并行处理的结果。使用par_extend
方法对data
进行并行处理,并将结果添加到processed_data
中。最后,通过使用extend
方法将processed_data
中的结果转移到results
向量中,并打印出所有处理的结果。
同样,请确保在Cargo.toml
文件中添加rayon
crate 的依赖项。