当前位置: 首页 > news >正文

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

1.在Rust中,拼接二维Vec通常意味着将多个一维Vec组合成一个二维Vec。假设你想要将多个Vec<T>拼接成一个Vec<Vec<T>>,你可以使用迭代器方法来实现。

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

fn main() {// 创建几个一维Veclet vec1 = vec![1, 2, 3];let vec2 = vec![4, 5, 6];let vec3 = vec![7, 8, 9];// 使用collect将它们拼接成一个二维Veclet 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() {// 创建几个一维Veclet 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() {// 创建几个二维Veclet 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方法将它们拼接成一个新的二维Veclet 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是用于垂直方向的展平。如果你需要水平方向上的拼接,请提供更多的上下文,以便我能给出更准确的帮助。


http://www.lryc.cn/news/355887.html

相关文章:

  • 低代码与人工智能:改变软件开发的未来
  • 第三方软件检测机构要具备哪些资质要求?专业测试报告如何申请?
  • 快团团帮卖团长怎么对供货大团长进行评分?
  • 双向带头链表实现
  • 黑马python-面向对象程序设计
  • pod容器基础概念
  • AI日报:百度发布文心大模型学习机;Open-Sora 1.1可生成21秒视频;Canva可以自动剪辑视频了;超牛ComfyUI节点AnyNode来了
  • VUE3+TS+elementplus+Django+MySQL实现从数据库读取数据,显示在前端界面上
  • 用c++做贪吃蛇
  • 【UE5.1 角色练习】08-传送技能
  • 力扣283题:移动零(快慢指针)
  • Java面试精粹:高级问题与解答集锦(一)
  • Yourpassword does not satisfy the current policyrequirements
  • 解决vue3 vite打包报Root file specified for compilation问题
  • Java Swing + MySQL图书借阅管理系统
  • ssm招聘信息管理系统-计算机毕业设计源码78049
  • eBPF可观测之网络流量控制和管理traffic control浅尝
  • Java技术精粹:高级面试问题与解答指南(二)
  • 地下停车场FM信号覆盖系统技术原理用与应用
  • idea 出现 cpu占用100%
  • 如何学到数据库从入门到入土(MySQL篇)
  • 安卓手机APP开发__Wi-Fi扫描概述
  • 深入理解二叉树及其在C语言中的实现
  • 基于ssm+vue图书管理系统
  • 高防ip能防护变异CC攻击吗
  • 从多站点到多活,XEOS 对象数据容灾能力再提升
  • 3D开发工具HOOPS在BIM系统中的应用
  • 适合下班做的副业兼职、1天挣300,7天涨粉2万
  • JS中getElementById与querySelector区别收录
  • Android:使用Kotlin搭建MVC架构模式