网站开发工程师工作描述,阿里云ace搭建wordpress,wordpress点击退出图片,成都市住房与城乡建设局官网文章目录 示例dedup_bydedup_by_key Rust系列#xff1a;初步⚙所有权⚙结构体和枚举类⚙函数进阶⚙泛型和特征⚙并发和线程通信
示例
Rust中的动态数组Vec提供了dedup函数#xff0c;用于删除相邻重复元素。此外#xff0c;还提供了dedup_by和dedup_by_key#xff0c;可… 文章目录 示例dedup_bydedup_by_key Rust系列初步⚙所有权⚙结构体和枚举类⚙函数进阶⚙泛型和特征⚙并发和线程通信
示例
Rust中的动态数组Vec提供了dedup函数用于删除相邻重复元素。此外还提供了dedup_by和dedup_by_key可根据条件删除相邻元素。示例如下
fn main(){let mut vec vec![1, 2, 2, 3, 2, 3, 4, 5];vec.dedup();println!(vec.dedup());for i in vec.iter_mut(){println!({}, i);}vec.dedup_by(|a,b|{(*a)-(*b)1});println!(dedup_by);for i in vec.iter_mut(){println!({}, i);}vec.dedup_by_key(|a|{*a1});println!(dedup_by_key);for i in vec.iter_mut(){println!({}, i);}
}其运行结果如下 vec.dedup() 1 1 1 2 2 2 3 3 3 2 2 2 3 3 3 4 4 4 5 5 5 dedup_by 1 1 1 3 3 3 2 2 2 4 4 4 dedup_by_key 1 1 1 3 3 3 其中dedup的功能是删除相邻重复元素这个很容易理解在输入数组 1 , 2 , 2 , 3 , 2 , 3 , 4 , 5 1,2,2,3,2,3,4,5 1,2,2,3,2,3,4,5中两个2相邻且重复所以删除了一个结果为 1 , 2 , 3 , 2 , 3 , 4 , 5 1,2,3,2,3,4,5 1,2,3,2,3,4,5。
dedup_by
其定义如下
pub fn dedup_byF(mut self, same_bucket: F)
whereF: FnMut(mut T, mut T) - bool,dedup_by可指定相邻两个元素的关系如果符合这个关系那么就删除后面的值。
在示例代码中
vec.dedup_by(|a,b|{(*a)-(*b)1});用于判定的函数是|a,b|{*a-*b1}这里有一个稍显诡异的地方即 a a a表示后面的元素而 b b b表示前面的元素。那么词判定函数的含义是当后面的元素比前面的元素大1时满足要求。对于输入的 1 , 2 , 3 , 2 , 3 , 4 , 5 1,2,3,2,3,4,5 1,2,3,2,3,4,5来说 ( 1 , 2 ) , ( 2 , 3 ) , ( 2 , 3 ) , ( 4 , 5 ) (1,2), (2,3), (2,3), (4,5) (1,2),(2,3),(2,3),(4,5)都满足要求从而删除后面那个满足要求的值剩下 1 , 3 , 2 , 4 1,3,2,4 1,3,2,4。
dedup_by_key
其定义如下
pub fn dedup_by_keyF, K(mut self, key: F)
whereF: FnMut(mut T) - K,K: PartialEqK,其功能为对于相邻且复合条件的元素仅保留一个值。
在示例代码中
vec.dedup_by_key(|a|{*a1});用于判定的函数是|a|{*a1}即只要大于1就复合要求。而 1 , 3 , 2 , 4 1,3,2,4 1,3,2,4这四个值中 3 , 2 , 4 3,2,4 3,2,4均符合要求并且二者相邻所以只保留一个值最后输出结果为 1 , 3 1,3 1,3。