< 返回版块

sharkLoc 发表于 2022-11-03 22:51

Tags:多行迭代器

问题如题哈,我现在有一个文件,文件每两行为一个小单元;综合两行信息,决定这两行信息是否被剔除,不知道如何构建这样的迭代器,望各位前辈指点下,有简单思路就行,先谢谢啦!

评论区

写评论
作者 sharkLoc 2022-11-04 20:54

多谢大佬!

--
👇
苦瓜小仔: 构造两个迭代器意味着读取文件两次。

读取一次的话,除了一楼给的 Itertools::tuple 方法,还可以用 Iterator::next_chunk

https://play.rust-lang.org/?version=nightly&mode=debug&edition=2021&gist=7c9a7405083ec419379bb01d20b10e17

MrZLeo 2022-11-04 15:12

除此之外,还可以用模式匹配来处理这种情况 : )

let lines = vec![1, 2, 3, 4];
let mut left = &lines[..];
while let [line_1, line_2, x @ ..] = left {
    left = x;
    println!("{line_1}, {line_2}");
    println!("left = {:?}", left);
}
viruscamp 2022-11-04 11:52
        struct DoubleIterator<T, I: Iterator<Item=T>>(I);
        impl<T, I: Iterator<Item=T>> Iterator for DoubleIterator<T, I> {
            type Item = [T; 2];
            fn next(&mut self) -> Option<Self::Item> {
                let i1 = self.0.next();
                if i1.is_none() {
                    return None;
                }
                let i2 = self.0.next();
                if i2.is_none() {
                    return None;
                }
                return Some([i1.unwrap(), i2.unwrap()]);
            }
        }
苦瓜小仔 2022-11-04 10:29

构造两个迭代器意味着读取文件两次。

读取一次的话,除了一楼给的 Itertools::tuple 方法,还可以用 Iterator::next_chunk

https://play.rust-lang.org/?version=nightly&mode=debug&edition=2021&gist=7c9a7405083ec419379bb01d20b10e17

作者 sharkLoc 2022-11-04 09:33

谢谢,感觉可行

--
👇
MrZLeo: 我的想法是,首先构造两个迭代器,一个是单数行,一个是双数行(用step实现)。然后把两个迭代器zip起来,接着用filter过滤你不想要的行,最后for_each把成组的两行按顺序插入一个Vec就可以了。

MrZLeo 2022-11-04 09:29

我的想法是,首先构造两个迭代器,一个是单数行,一个是双数行(用step实现)。然后把两个迭代器zip起来,接着用filter过滤你不想要的行,最后for_each把成组的两行按顺序插入一个Vec就可以了。

作者 sharkLoc 2022-11-04 09:19

谢谢,但是buffer迭代器好像不支持这样的操作。

--
👇
Easonzero: https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=d91527871d0aabf2814846522072d231

gorust21 2022-11-04 08:34

把下坐标移到下一个开始不就可以了

Easonzero 2022-11-04 06:44

https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=d91527871d0aabf2814846522072d231

1 共 9 条评论, 1 页