leo*_*848 4 iterator rust rust-itertools
我有一个形式的迭代器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板条箱中也是如此。
这是仅使用标准库的一种方法。它需要 aDoubleEndedIterator并将跳过奇数大小的迭代器的最后一项:
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<_>>());
}
Run Code Online (Sandbox Code Playgroud)
输出:
[src/main.rs:4] iter.collect::<Vec<_>>() = [
0,
63,
1,
62,
2,
61,
3,
...
30,
33,
31,
32,
]
Run Code Online (Sandbox Code Playgroud)
@Finomnis发布了一个解决方案,以防您的输入有奇数个项目。