【问题标题】:How to interlace an iterator with itself from the end?如何从最后将迭代器与自身交错?
【发布时间】:2022-07-04 23:32:49
【问题描述】:
我有一个0..=63 形式的迭代器,即
0 1 2 3 4 ... 59 60 61 62 63。
它的.count() 是 64。
如何获得以下迭代器:
0 63 1 62 2 61 3 60 4 59 ...
(当然独立于迭代器中存在的项目),最好不要克隆?
.count() 应该保持不变,因为只有项目的顺序应该改变。
我查看了标准库但找不到它,在 itertools crate 中也是如此。
【问题讨论】:
标签:
rust
iterator
itertools
【解决方案1】:
这是一种仅使用标准库的方法,该标准库仅适用于偶数大小的迭代器(对于奇数大小的迭代器,它将跳过最后一项):
fn main() {
let mut range = (0..=63).into_iter();
let iter = std::iter::from_fn(|| Some([range.next()?, range.next_back()?])).flatten();
dbg!(iter.collect::<Vec<_>>());
}
输出:
[src/main.rs:4] iter.collect::<Vec<_>>() = [
0,
63,
1,
62,
2,
61,
3,
...
30,
33,
31,
32,
]
Playground