【发布时间】:2018-09-14 22:19:23
【问题描述】:
我有一个包含二维数组的结构:
struct Block;
struct World {
blocks: [[Block; 10]; 10],
}
我如何编写一个函数来返回二维数组上的迭代器,但包含枚举索引?
fn enumerate_blocks(&self) -> impl Iterator<Item = (usize, usize, &Block)>
我设法编写了一个函数的实现,它只返回一个没有枚举索引的迭代器:
fn blocks(&self) -> impl Iterator<Item = &Block> {
self.blocks.iter().flat_map(|x| x.iter())
}
如果我调用Iterator::enumerate 一次,我将在(usize, [B; 10])s 上获得一个迭代器。接下来我可以做什么来获得(usize, usize, B)s 上的迭代器?
我知道我可以让函数返回一个自定义结构然后实现Iterator,就像image 一样,但理想情况下我想避免这种情况。
【问题讨论】:
-
这似乎相当低的努力...searching the Rust docs for enumerate 指向
Iterator::enumerate,这似乎是您所要求的大约 95%。假设您进行了这项研究,您在尝试使用它时遇到了什么问题? -
问题是我想枚举一个二维数组
[[B; 10]; 10]。或者更确切地说,返回一个可以迭代二维数组的迭代器。如果我调用 enumerate 一次,我将在(usize, [B; 10])s 上获得一个迭代器。我的问题是接下来我可以做些什么来获得(usize, usize, B)s 上的迭代器。