如何将两个Rust向量按三分之三的间隔插入一个新向量中? [英] How do I interleave two Rust vectors by chunks of threes into a new vector?

查看:66
本文介绍了如何将两个Rust向量按三分之三的间隔插入一个新向量中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I need an idiomatic way to interlace these two vectors:

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];

我期望的输出是:

[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 chunks 方法,但是我不认为这是最好的实现,因为有两个 collect 调用.

I used itertools chunks method, but I don't believe this is the best implementation because there are two collect calls.

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编写此迭代器的更好方法?

Is there a better way to write this iterator using itertools?

推荐答案

您要 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);
}

这篇关于如何将两个Rust向量按三分之三的间隔插入一个新向量中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆