Rust一维Vec垂直方向拼接、水平方向拼接,多个二维Vec垂直方向拼接

发布于:2024-05-22 ⋅ 阅读:(147) ⋅ 点赞:(0)
1.在Rust中,拼接二维Vec通常意味着将多个一维Vec组合成一个二维Vec。假设你想要将多个Vec<T>拼接成一个Vec<Vec<T>>,你可以使用迭代器方法来实现。

下面是一个示例,演示如何将多个一维Vec拼接成一个二维Vec

fn main() {
    // 创建几个一维Vec
    let vec1 = vec![1, 2, 3];
    let vec2 = vec![4, 5, 6];
    let vec3 = vec![7, 8, 9];

    // 使用collect将它们拼接成一个二维Vec
    let two_dimensional_vec: Vec<Vec<i32>> = vec![vec1, vec2, vec3];

    // 打印结果
    for row in two_dimensional_vec {
        println!("{:?}", row);
    }
}

输出将是:

[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
如果你想要将这些一维Vec在水平方向上拼接(即,将所有元素放入同一个Vec中),你可以这样做:
fn main() {
    // 创建几个一维Vec
    let vec1 = vec![1, 2, 3];
    let vec2 = vec![4, 5, 6];
    let vec3 = vec![7, 8, 9];

    // 使用迭代器链拼接它们
    let flattened_vec: Vec<i32> = vec1.into_iter()
        .chain(vec2)
        .chain(vec3)
        .collect();

    // 打印结果
    println!("{:?}", flattened_vec);
}

输出将是:

[1, 2, 3, 4, 5, 6, 7, 8, 9]

在这个例子中,chain方法被用来将多个迭代器连接成一个单一的迭代器,然后collect被用来将这个迭代器收集成一个Vec

根据你的需求,你可以选择垂直拼接(创建二维Vec)或水平拼接(创建一个更长的一维Vec)。

2.在Rust中,如果你想要将多个二维的Vec拼接成一个新的二维Vec,你可以使用迭代器的flatten方法来实现。这个方法会将嵌套的迭代器(在这个情况下是二维Vec)展平成一个单一的序列。

下面是一个示例,演示如何将多个二维的Vec<T>拼接成一个更大的二维Vec<T>

fn main() {
    // 创建几个二维Vec
    let vec2d1 = vec![vec![1, 2, 3], vec![4, 5, 6]];
    let vec2d2 = vec![vec![7, 8, 9], vec![10, 11, 12]];
    let vec2d3 = vec![vec![13, 14, 15], vec![16, 17, 18]];

    // 使用迭代器的flatten方法将它们拼接成一个新的二维Vec
    let flattened: Vec<Vec<i32>> = vec![vec2d1, vec2d2, vec2d3].into_iter()
        .flat_map(|inner_vec| inner_vec.into_iter().map(|inner_inner_vec| inner_inner_vec))
        .collect();

    // 打印结果
    for row in &flattened {
        println!("{:?}", row);
    }
}

输出将是:

[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
[10, 11, 12]
[13, 14, 15]
[16, 17, 18]

在这个例子中,我们首先创建了几个二维的Vec<i32>。然后,我们使用into_iter()将外层的Vec转换为迭代器,接着使用flat_map来将每个内部的Vec也转换为迭代器,并将它们映射为一维的Vec。最后,我们使用collect将迭代器收集成一个新的二维Vec

请注意,flat_map方法接受一个闭包,闭包的参数是外层迭代器的元素(在这里是一维的Vec),并且返回一个迭代器。在这个例子中,我们使用into_iter()将一维Vec转换为迭代器,然后使用map来保持每个元素的层级结构不变。

如果你想要将这些二维Vec在水平方向上拼接(即,将所有行连接成一行),你需要采用不同的方法,因为flatten是用于垂直方向的展平。如果你需要水平方向上的拼接,请提供更多的上下文,以便我能给出更准确的帮助。