首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rayon::str::Lines<'_'>不是迭代器

rayon::str::Lines<'_'>不是迭代器
EN

Stack Overflow用户
提问于 2019-08-09 03:50:52
回答 1查看 429关注 0票数 0

我尝试在Rust中逐行处理文件,并使用Rayon将其并行化。它会抱怨以下几点

代码语言:javascript
复制
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`

到目前为止,代码看起来是这样的

代码语言:javascript
复制
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);
}

我是否遗漏了一个特征定义?我如何修复这个错误?

EN

回答 1

Stack Overflow用户

发布于 2019-08-23 17:22:59

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

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

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57419699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档