如何将两个Rust向量三分插入新向量?

问题描述 投票:0回答:1

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

let v1 = vec![1.0, 2.0, 3.0, 4.0, 5.0, 6.0];
let v2 = vec![7.0, 8.0, 9.0, 10.0, 11.0, 12.0];

我期望的输出是:

v3 is [1.0, 2.0, 3.0, 7.0, 8.0, 9.0,
       4.0, 5.0, 6.0, 10.0, 11.0, 12.0];

我像这样使用itertools chunk方法,但是我不认为这是最好的实现,因为有两个collect调用。

let output = interleave(&v1.into_iter().chunks(3), &v2.into_iter().chunks(3)).map(|v| {v.into_iter().collect::<Vec<f32>>()}).flatten().collect::<Vec<f32>>();

是否有使用itertools编写此迭代器的更好方法?

vector rust itertools interleave
1个回答
0
投票

您要Iterator::flatten

use itertools::interleave;

fn main() {
    let v1 = vec![1.0, 2.0, 3.0, 4.0, 5.0, 6.0];
    let v2 = vec![7.0, 8.0, 9.0, 10.0, 11.0, 12.0];
    let v = interleave(v1.chunks(3), v2.chunks(3))
        .flatten()
        .collect::<Vec<_>>();
    dbg!(v);
}
© www.soinside.com 2019 - 2024. All rights reserved.