微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Rust-嵌套循环在内部循环内仅运行一次

如何解决Rust-嵌套循环在内部循环内仅运行一次

我正在从文本文件获取数据

let fil1_json = File::open("fil1.json")?;
let mut fil1_json_reader = BufReader::new(fil1_json);

let fil2_json = File::open("fil2.json")?;
let mut fil2_json_reader = BufReader::new(fil2_json);

for fil1_line in fil1_json_reader.by_ref().lines() {
    for fil2_line in fil2_json_reader.by_ref().lines() {
        println!("{:#?} ----- {:#?}",fil1_line,fil2_line);
    }
}

在第二个嵌套循环中,它仅进入内部一次。似乎fil2_json_reader在第一次迭代后就被清空了。

在哪里改变,因为我什么都没改变?

解决方法

在哪里改变,因为我什么都没改变?

读者消耗数据。对于File,这是自然的期望,因为文件抽象几乎普遍具有每次读取时都会前进的游标。

如果您想对相同的数据进行多次迭代,那么显而易见的选择是将其保存到内存中(通常在拆分为lines()之前,但是即使速度较慢,也可以保存其中的向量) )。但是,由于读者有一个实际文件作为后盾,因此最好通过seek重新开始该文件来重新迭代该文件:

fil2_json_reader.seek(SeekFrom::Start(0))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。