rust Vec 常用操作
目录
Vec
声明
判空
循环遍历带下标和值
循环遍历输出
循环遍历修改
追加
删除
修改
排序-整数排序
搜索
转换
条件筛选
调整大小
比较两个vec元素的最大值
条件过滤
Vec
一种连续的可增长数组类型,写为 Vec<T> ,读作 vector 。堆分配内容,连续可增长,有序的数组类型分配的字节数永远不会超过 isize :: MAX 字节。
只能储存相同类型的值,但其存储类型可以自定义
声明
let mut vec2: Vec<i32> = Vec::new();println!(" 声明一个空Vec {:?} , 长度 {} ", vec2, vec2.len());let mut vec3 = [1].repeat(5);println!(" 声明一个重复元素的Vec: {:?}", vec3);let mut vec4 = Vec::with_capacity(10);println!(" 声明一个初始长度为10的Vec: {:?} , 长度 len{} capacity {}",vec4,vec4.len(),vec4.capacity());let mut vec = vec![1, 5, 10, 2, 15];println!(" 用宏声明Vec时赋值 {:?} , 长度 {} ", vec, vec.len());console:声明一个空Vec [] , 长度 0 声明一个重复元素的Vec: [1, 1, 1, 1, 1]声明一个初始长度为10的Vec: {:?} , 长度 len 0 capacity 10用宏声明Vec时赋值 [1, 5, 10, 2, 15] , 长度 5
判空
let mut vec = vec![1, 5, 10, 2, 15]; let n: Option<&i32> = vec.get(0);println!(" Vec是否为空 :{}, 元素0:{}", vec.is_empty(), n.is_none());console:Vec是否为空 :false, 元素0 :false
循环遍历带下标和值
let v = vec!['a', 'b', 'c']; for (index, value) in v.iter().enumerate() {println!("{} is at index {}", value, index);}
循环遍历输出
let mut v = vec![1, 2, 3];print!("&v ");for x in &v {print!("{} ", x);}println!(" ");print!("len get ");for x in 0..v.len() {if let Some(num) = v.get(x) {print!("{} ", num);}}println!(" ");print!("iter ");for x in v.iter() {print!("{} ", x);}println!(" ");print!("into_iter ");for x in v.into_iter() {print!("{} ", x);}println!(" ");console:&v 1 2 3 len get 1 2 3 iter 1 2 3 into_iter 1 2 3
循环遍历修改
let mut v1 = vec![1, 2, 3];for x in &mut v1 {*x += 1;}println!("&mut v1 {:?}", v1);for x in v1.iter_mut() {*x += 1;}println!("v1.iter_mut {:?}", v1);for x in 0..v1.len() {if let Some(num) = v1.get_mut(x) {*num += 1;}}println!("0..v1.len() get_mut {:?}", v1);let v2: Vec<i32> = v1.iter().map(|x| x + 1).collect();println!("v1.iter().map().collect() {:?}", v2);console:&mut v1 [2, 3, 4]v1.iter_mut [3, 4, 5]0..v1.len() get_mut [4, 5, 6]v1.iter().map().collect() [5, 6, 7]
追加
let mut vec = vec![1, 5];vec.push(13); //追加到末尾println!(" 追加一个元素到末尾: {:?}", vec);vec.extend([1, 2, 3].iter().copied()); //追加到末尾println!(" 追加一组元素到末尾: {:?}", vec);let mut vec5 = [1].repeat(2);vec.append(&mut vec5);println!(" 追加一组元素到末尾: {:?}", vec);console:追加一个元素到末尾: [1, 5, 13]追加一组元素到末尾: [1, 5, 13, 1, 2, 3]追加一组元素到末尾: [1, 5, 13, 1, 2, 3, 1, 1]
删除
let mut vec = vec![1, 5, 6];vec.remove(vec.len() - 1);println!(" 删除末尾的元素: {:?} , 长度 {}", vec, vec.len());vec.pop();println!(" 删除末尾的元素: {:?} , 长度 {}", vec, vec.len());console:删除末尾的元素: [1, 5] , 长度 2删除末尾的元素: [1] , 长度 1
修改
let mut vec = vec![1, 5, 6];vec[0] = 2;println!(" 第一个元素被修改 {:?} ", vec);console:第一个元素被修改 [2, 5, 6]
排序-整数排序
let mut vec = vec![1, 9, 6];//排序println!(" 排序前: {:?}", vec);vec.sort();println!(" 排序后: {:?}", vec);console:排序前: [1, 9, 6]排序后: [1, 6, 9]
搜索
let ss = vec.contains(&1);println!(" 是否有元素 {:?}:{}", vec, ss);console:是否有元素 [1, 9, 6]:true
转换
//数组转Veclet array: [i32; 3] = [10, 40, 30];let vec: Vec<i32> = array.to_vec();let vec1: Vec<i32> = array.iter().cloned().collect();
条件筛选
let mut vec = vec![1, 2, 4, 5];//条件筛选vec.retain(|&x| x % 2 == 0);println!(" 条件筛选,只留下能整除2的 {:?} , 长度 {} ",vec,vec.len());console:条件筛选,只留下能整除2的 [2, 4] , 长度 2
调整大小
let mut vec = vec![1, 2, 3, 4];vec.resize(2, 0);println!(" new_len小于len,截断 {:?}", vec);vec.resize(4, 0);println!(" new_len大于len,按差值进行扩展 {:?}", vec);//let mut vec = vec![1, 1, 1, 2, 3];let vec2 = vec.split_off(2);println!(" 按元素下标切分为2 vec: {:?} , vec2: {:?}", vec, vec2);console:new_len小于len,截断 [1, 2]new_len大于len,按差值进行扩展 [1, 2, 0, 0]按元素下标切分为2 vec: [1, 1] , vec2: [1, 2, 3]
比较两个vec元素的最大值
let mut vec1 = vec![1, 1, 1, 1, 1];let mut vec2 = vec![1, 1, 1, 4];let mut vec3 = vec1.max(vec2);println!(" 比较最大值,返回有最大值的vec: {:?}", vec3);let mut vec1 = vec![1, 1, 1, 1, 1];let mut vec4 = vec1.min(vec3);println!(" 比较最大值,返回有最小值的vec: {:?}", vec4);console:比较最大值,返回有最大值的vec: [1, 1, 1, 4]比较最大值,返回有最大值的vec: [1, 1, 1, 1, 1]
条件过滤
filter 迭代器适配器和捕获环境的闭包的用例。迭代器的 filter 方法获取一个使用迭代器的每一个项并返回布尔值的闭包。
闭包返回 true,包含在迭代器中;返回 false,不会包含在迭代器。
let vec = vec![1, 2, 3];let new_vec: Vec<i32> = vec.into_iter().filter(|x| *x > 1).collect();assert_eq!(new_vec, [2, 3])
rust Vec 常用操作相关推荐
- STL常用操作:deque
1.初始化 deque<int> deq; //创建一个空的deque deque<int> deq(deq1); //用一个已有的deque初始化当前deque deque& ...
- TensorFlow常用操作:代码示例
1,定义矩阵代码示例: import tensorflow as tftf.zeros([3,4]) #定义3行4列元素均为0的矩阵tensor=tf.constant([1,2,3,4])#定义一维 ...
- Ubuntu 常用操作
Ubuntu常用操作 外观操作 修改应用icon图标 终端美化 内存管理 内存查询 分区管理 日志清理 操作执行 自动执行多条命令 外观操作 修改应用icon图标 在/usr/share/applic ...
- IOS沙盒Files目录说明和常用操作
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launc ...
- 用Python轻松搞定Excel中的20个常用操作
来源 |早起Python(ID: zaoqi-python) Excel与Python都是数据分析中常用的工具,本文将使用动态图(Excel)+代码(Python)的方式来演示这两种工具是如何实现数据 ...
- python和R对dataframe的常用操作的差异:head、tail、shape、dim、nrow、ncol、descirbe、summary、str
python和R对dataframe的常用操作的差异:head.tail.shape.dim.nrow.ncol.descirbe.summary.str # python df.head() # R ...
- 【node】Sequelize常用操作、基本增删改查
[node]Sequelize常用操作.基本增删改查 sequelize初始化 先初始化一个数据库实例 再初始化一个model实例 sequelize的数据类型 基本增删改查的写法 SELECT * ...
- JavaScript:对Object对象的一些常用操作总结
JavaScript对Object对象的一些常用操作总结. 一.Object.assign() 1.可以用作对象的复制 var obj = { a: 1 }; var copy = Object.as ...
- ubuntu的学习教程(常用操作)
摘要 最近在学习linux,把自己学习过程中遇到的常用操作以及一些有助于理解的内容记录下来.我主要用的是ubuntu系统 命令提示符 '~' 这个是指用户的家目录,用户分为root用户和普通用户,ro ...
最新文章
- 基于linux环境采用update-alternatives 方式进行python版本切换
- Windows 禁止mysql 自动更新
- sql添加约束相关示例
- 数组多重筛选条件排序方法
- hadoop元数据mysql中表字段_Hive元数据表汇总分析
- 华为Q22机顶盒,刷机固件及教程(当贝桌面)
- 红旗服务器安装Tuxedo中间件
- 各国货币名称中英对照
- 关闭Win10强制自动更新驱动
- 汇编程序设计:钟表显示
- 又是一年1024(2019)
- c语言一个小写字母字节,C语言:给定一个小写字母,转换成大写字母
- 数组中的slice()方法和splice()
- NIOS II 8:SDRAM(W9825G6KH-6),从这里开始使用软件版本改为18.
- 基于Android的个人记账软件的设计与实现
- PLC数据采集与远程监控方案
- 2016年阿里校园招聘笔试题--系统工程师
- Unity多场景管理
- 使用pip安装pymqsql,出现Cannot unpack file xxx的问题的解决以及pip安装速度慢或出现readtime out问题的解决。
- PHP比较好的学习网站