0

我正在尝试在 Rust 中逐行处理文件并使用 Rayon 将其并行化。它抱怨以下内容

rayon::str::Lines<'_>` is not an iterator
   = help: the trait `std::iter::Iterator` is not implemented for 
   = note: required by `std::iter::IntoIterator::into_iter`

到目前为止,这就是代码的样子

use rayon::prelude::*;
use std::fs;

fn main() {
    let file_content = match fs::read_to_string("input.txt") {
        Ok(s) => s,
        Err(e) => {
            eprintln!("Error: {}", e);
            std::process::exit(1);
        }
    };

    file_content = 5;

    for line in file_content.par_lines() {
        println!("{}", line);
    }

    std::process::exit(0);
}

我是否缺少特征定义?我该如何解决这个错误?

4

1 回答 1

2

您不能将并行迭代器与(非并行)for循环一起使用。

相反,.for_each(|| …)在并行迭代器上使用回调。

或者,先调用.collect::<Vec<_>>(),然后非并行for

对于更高级的情况,您还可以将结果并行发送到通道,然后使用非并行for从通道中读取。

于 2019-08-23T09:22:59.173 回答