如何从末尾将迭代器与其自身交错?

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板条箱中也是如此。

Dog*_*ert 5

这是仅使用标准库的一种方法。它需要 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发布了一个解决方案,以防您的输入有奇数个项目。