Vec 的常用函数和链式调用里每个方法

Vec常用函数链式调用里每个方法一次讲清,可以直接当“速查表”。


一、Vec 自身常用函数(非全部,但足够覆盖 90% 场景)

分类典型函数一句话说明
创建Vec::new() / vec![]空 Vec / 宏初始化
push(e) / extend(iter) / insert(idx, e)尾部追加、批量追加、指定位置插入
pop() / remove(idx) / clear()尾部弹出、按索引删、清空
swap(i, j) / reverse() / sort() / dedup()交换、反转、排序、去重(相邻)
len() / is_empty() / contains(&e) / binary_search(&e)长度、空判断、包含、二分查找
内存capacity() / reserve(n) / shrink_to_fit()容量、预分配、缩容
转换into_boxed_slice() / into_iter() / as_slice()转 Box 切片、转迭代器、转切片
迭代器iter() / iter_mut() / drain(range)只读、可变、移除并迭代

二、链式调用逐段拆解

let map: HashMap<usize, &str> = v.iter()
                                 .enumerate()
                                 .collect();
方法作用输入→输出
.iter()产生只读迭代器,元素是 &TVec<T>Iterator<Item=&T>
.enumerate()把每个元素再包一层“序号”,变成 (idx, &T)Iterator<Item=&T>Iterator<Item=(usize, &T)>
.collect()把任何迭代器“收集”成指定集合类型;这里目标类型是 HashMap<usize, &str>,只要元素是 (K, V) 就能直接收Iterator<Item=(usize, &str)>HashMap<usize, &str>

三、快速对比三种迭代器

调用元素类型能否修改所有权
v.iter()&T不消耗 v
v.iter_mut()&mut T不消耗 v
v.into_iter()T消耗 v,之后不能再使用 v

四、再来两个常见链式例子

// 1. 把 vec 里每个数平方后收集成新 Vec
let v2: Vec<i32> = v.iter().map(|x| x * x).collect();

// 2. 找出值大于 10 的索引
let idxs: Vec<usize> = v.iter()
                        .enumerate()
                        .filter(|(_, &val)| val > 10)
                        .map(|(i, _)| i)
                        .collect();

背住这三板斧,就能随意组合:

iter / iter_mut / into_iter
enumerate / map / filter
collect / fold / count / sum

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值