【问题标题】:How do I interlace two Rust vectors into a new vector?如何将两个 Rust 向量交织成一个新向量?
【发布时间】:2019-12-10 13:01:38
【问题描述】:

我需要一种惯用的方式来交织这两个向量:

v1 = vec![1.0, 2.0, 3.0];
v2 = vec![4.0, 5.0, 6.0];

我期望的输出是:

v3 is [1.0, 4.0, 2.0, 5.0, 3.0, 6.0];

我尝试使用 itertool 的 interlace 函数,但我无法让迭代器收集到 Vec 类型。可能我用错了。

【问题讨论】:

  • 使用标准迭代器:play.rust-lang.org/…
  • @ÖmerErden 很快,当IntoIter 为数组实现时,您将不再需要奇怪的once 链接:)
  • @FrenchBoiethios 我希望元组有IntoIter 实现,在那之前让我们坚持使用.flat_map(|(x, y)| vec![x,y]):P
  • 干得好,谢谢 Omer!

标签: vector rust iterator traits itertools


【解决方案1】:

使用来自Itertools crate 的interleave() 函数或interleave() 方法:

use itertools::{interleave, Itertools};

fn main() {
    let v1 = vec![1.0, 2.0, 3.0];
    let v2 = vec![4.0, 5.0, 6.0];
    let v = interleave(v1, v2).collect::<Vec<_>>();
    dbg!(v);

    let v1 = vec![1.0, 2.0, 3.0];
    let v2 = vec![4.0, 5.0, 6.0];
    let v = v1
        .into_iter()
        .interleave(v2.into_iter())
        .collect::<Vec<_>>();
    dbg!(v);
}

【讨论】:

    猜你喜欢
    • 2020-04-06
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多