rust 将结果的迭代器转换为迭代器的结果

eh57zj3b  于 2022-12-04  发布在  其他
关注(0)|答案(1)|浏览(149)

到目前为止,我已经使用std::fs::read_to_stringString.linesstd::str::Lines(它是一个Iterator<Item = &str>)“逐行”读取文件。
因此,有BufRead.lines()来真正逐行读取文件,它返回std::io::Lines(它是Iterator<Item = Result<String>>)。
如何在不先使用collect的情况下,从一种迭代器类型转换为另一种迭代器类型?

1l5u6lss

1l5u6lss1#

String.lines的情况下,你不需要有一个完整的String值的所有者,但是你可以把Iterator<Item = Result<String>转换成Strings上的迭代器:

let mut read = BufReader::new(File::open("src/main.rs").unwrap());
let lines_iter = read.lines().map(Result::unwrap_or_default);

您可以在String&str的项目上取Iterator,如下所示:

fn solve<T: AsRef<str>>(input: impl Iterator<Item = T>) {
    for line in input {
        let line = line.as_ref();
        // do something with line
    }
}

相关问题