【问题标题】: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

    【讨论】:

      猜你喜欢
      • 2017-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-30
      • 2019-08-09
      • 2016-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多