首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >迭代器内部迭代器

迭代器内部迭代器
EN

Stack Overflow用户
提问于 2022-08-11 18:41:41
回答 1查看 84关注 0票数 0

我正在试图在表的行上构建一个迭代器,并且我使用了一个库来读取这个文件。这个库有一个适当的迭代器。我想知道如何链接这两个迭代器,我的意思是,当我在迭代器上调用下一个迭代器时,也调用下一个lib调用。

代码语言:javascript
复制
impl Iterator for MyStruct {
  type Item = item;

  fn next(&mut self) -> Option<Self::Item> {
    records().next()
  }
}

我这样做了,但是每次只调用第一次,我需要库迭代器的所有行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-11 19:16:51

通过在records()函数中调用next(),您每次都要创建一个新的迭代器,因此在每次next()调用时都要从头开始。

您需要将records迭代器存储在结构中,然后重用它,而不是每次都重新创建它。这样,它就能在呼叫之间保持状态。

请看下面的示例:

代码语言:javascript
复制
fn records() -> impl Iterator<Item = i32> {
    (1..5).into_iter()
}

struct MyStruct {
    records_iter: Box<dyn Iterator<Item = i32>>,
}

impl MyStruct {
    fn new() -> Self {
        Self {
            records_iter: Box::new(records()),
        }
    }
}

impl Iterator for MyStruct {
    type Item = i32;

    fn next(&mut self) -> Option<Self::Item> {
        self.records_iter.next()
    }
}

fn main() {
    let my_obj = MyStruct::new();

    for element in my_obj {
        println!("{}", element);
    }
}
代码语言:javascript
复制
1
2
3
4
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73325480

复制
相关文章

相似问题

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