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 在第一次迭代后被清空。

它在哪里改变,而我却没有任何改变?

最佳答案

Where it is changing as I am not changing anywhere?

读者消费数据。对于文件来说,这是很自然的期望,因为文件抽象几乎普遍都有一个光标,每次您阅读时都会前进。

如果您想对相同的数据进行多次迭代,那么显而易见的选择是将其保存到内存中(通常在拆分为 lines() 之前,但您也可以保存这些数据的向量,甚至如果会慢一点)。但是,由于读取器有实际文件支持,因此最好通过seek到其开头来重新迭代该文件:

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

关于Rust - 嵌套循环仅在内循环内进行一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63822669/

相关文章:

rust - 如果Rust项目已更新,请重新运行规则

Rust 借用检查器在 if 语句中抛出错误

rust - 如何在 BTreeMap/BTreeSet 中找到下一个较小的键?

rust - 生命周期注释,或 &str vs String

rust - 尝试实现查找或插入时 HashMap 借用问题

rust - 限制 Rust 中的对象生命周期

rust - Rust 标准库有 Min/Max 特性吗?

multithreading - 如何在self中使用方法使用函数进行线程化?

rust - 如何使用 turbofish 运算符实现通用特征

generics - 为什么 Rust 不使用默认的泛型参数类型