Rust根据条件删除相邻元素:dedup

文章目录

    • 示例
    • dedup_by
    • dedup_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|{*a>1});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_by<F>(&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-*b==1},这里有一个稍显诡异的地方,即 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_key<F, K>(&mut self, key: F)
whereF: FnMut(&mut T) -> K,K: PartialEq<K>,

其功能为,对于相邻且复合条件的元素,仅保留一个值。

在示例代码中,

vec.dedup_by_key(|a|{*a>1});

用于判定的函数是|a|{*a>1},即只要大于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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/147685.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32外部中断(EXTI)与RTOS多任务处理的协同设计

当在STM32上使用外部中断&#xff08;EXTI&#xff09;与RTOS&#xff08;Real-Time Operating System&#xff0c;实时操作系统&#xff09;进行多任务处理时&#xff0c;需要设计合适的协同机制&#xff0c;以确保可靠的中断处理和任务调度。在下面的概述中&#xff0c;我将介…

【shell 常用脚本30例】

先了解下编写Shell过程中注意事项 开头加解释器&#xff1a;#!/bin/bash语法缩进&#xff0c;使用四个空格&#xff1b;多加注释说明。命名建议规则&#xff1a;全局变量名大写、局部变量小写&#xff0c;函数名小写&#xff0c;名字体现出实际作用。默认变量是全局的&#xf…

AnimateDiff搭配Stable diffution制作AI视频

话不多说&#xff0c;先看视频 1. AnimateDiff的技术原理 AnimateDiff可以搭配扩散模型算法&#xff08;Stable Diffusion&#xff09;来生成高质量的动态视频&#xff0c;其中动态模型&#xff08;Motion Models&#xff09;用来实时跟踪人物的动作以及画面的改变。我们使用 …

MongoDB之索引和聚合

文章目录 一、索引1、说明2、原理3、相关操作3.1、创建索引3.2、查看集合索引3.3、查看集合索引大小3.4、删除集合所有索引&#xff08;不包含_id索引&#xff09;3.5、删除集合指定索引 4、复合索引 二、聚合1、说明2、使用 总结 一、索引 1、说明 索引通常能够极大的提高查…

安卓手机投屏到电视,跨品牌、跨地域同样可以实现!

在手机网页上看到的视频&#xff0c;也可以投屏到电视上看&#xff01; 长时间使用手机&#xff0c;难免脖子会酸。这时候&#xff0c;如果你将手机屏幕投屏到大电视屏幕&#xff0c;可以减缓脖子的压力&#xff0c;而且大屏的视觉体验更爽。 假设你有一台安卓手机&#xff0c;…

Pycharm之配置python虚拟环境

最近给身边的人写了脚本&#xff0c;在自己电脑可以正常运行。分享给我身边的人&#xff0c;却运行不起来&#xff0c;然后把报错的截图给我看了&#xff0c;所以难道不会利用pycharm搭建虚拟的环境&#xff1f;记录一下配置的过程。 第一步&#xff1a;右键要打开的python的代…

科大讯飞会议笔记本、GoodNotes、E人E本 功能及体验对比

科大讯飞会议笔记本、GoodNotes、E人E本功能及体验对比 【旧文档&#xff0c;怕失传】 通过对科大讯飞会议笔记本、基于iPad的GoodNotes以及E人E本的各项功能指标进行了实际对比&#xff0c;得出了以下结果&#xff1a; 在实际体验中&#xff0c;科大讯飞笔记本在录音方面表…

人脸识别4G执法记录仪、一体化智能AI布控球在智慧社区、智能网格中的应用

智慧社区守护者&#xff1a;人脸识别与智能监控技术的融合创新 随着城市的飞速发展和科技的不断进步&#xff0c;智慧社区和智能网格的概念已经成为现代城市管理的一个重要趋势。在这一过程中&#xff0c;人脸识别技术、4G执法记录仪以及一体化智能AI布控球等智能监控设备&…

大数据之Hive:regexp_extract函数案例

目录 一、正则的通配符简介1、正则表达式的符号及意义2、各种操作符的运算优先级&#xff1a; 二、案例数据要求分析实现输出结果实现2实现3 总结 一、正则的通配符简介 1、正则表达式的符号及意义 符号含义实列/做为转意&#xff0c;即通常在"/"后面的字符不按原来…

SQL Server去除字符串空格的ltrim() 和 rtrim()函数

SQL Server去除字符串空格的ltrim() 和 rtrim()函数 SQL Server并不提供trim()函数去除字符串两边空格&#xff0c;只提供了去除字符串左边空格ltrim()函数和去除右边字符串空格rtrim()函数&#xff0c;但是只要将这两个函数配合使用&#xff0c;就能达到去除字符串两端空格的…

小美的树上染色

美团2024届秋招笔试第一场编程真题 先提一个小知识&#xff1a;题目中凡是提到树结构都要使用图的存储方式&#xff0c;只有二叉树例外。 分析&#xff1a;在树结构中&#xff0c;孩子和父节点是相邻节点&#xff0c;而父节点可能有多个孩子节点。在染色的过程中&#xff0c;…

实用小算法

开头提醒&#xff1a; 打开自己本地任意一个SpringBoot项目&#xff0c;复制代码到test包下跟着敲。 后面几篇文章不再提醒&#xff0c;希望大家养成习惯。看10篇文章&#xff0c;不如自己动手做一次。 我们不执着于一天看多少篇&#xff0c;但求把每一篇都搞懂&#xff0c;…

如何使用websocket+node.js实现pc后台与小程序端实时通信

如何使用websocketnode.js实现pc后台与小程序端实时通信 一、使用node.js创建一个服务器二、pc后台连接ws三、小程序端连接ws四、实现效果 实现功能:实现pc后台与小程序端互发通信能够实时检测到 一、使用node.js创建一个服务器 1.安装ws依赖 npm i ws2.创建index.js const…

后端技术知识点内容-全部内容-面试宝典-后端面试知识点

文章目录 -2 flink-1 linux of viewlinux查看占用cup最高的10个进程的命令&#xff1b; 〇、分布式锁 & 分布式事务0-1分布式锁--包含CAP理论模型概述分布式锁&#xff1a;分布式锁应该具备哪些条件&#xff1a;分布式锁的业务场景&#xff1a; 分布式锁的实现方式有&#…

整理笔记——MOS管、三极管、IGBT

一、MOS管 在实际生活要控制点亮一个灯&#xff0c;例如家里的照明能&#xff0c;灯和电源之间就需要一个开关需要人为的打开和关闭。 再设计电路板时&#xff0c;如果要使用MCU来控制一个灯的开关&#xff0c;通常会用mos管或是三极管来做这个开关元件。这样就可以通过MCU的信…

Linux安装OpenCV并配置VSCode环境

Linux安装OpenCV并配置VSCode环境 安装OpenCV环境安装必需工具下载并解压OpenCV库&#xff08;Opencv Core Modules和opencv_contrib&#xff09;创建构建目录&#xff0c;进行构建验证构建结果安装验证安装结果 配置VSCode环境创建项目文件修改配置信息执行程序 安装环境 Ubun…

DRF纯净版项目搭建和配置

一、安装模块和项目 1.安装模块 pip install django pip install djangorestframework pip install django-redis # 按需安装 2.开启项目和api (venv) PS D:\pythonProject\env_api> django-admin startproject drf . (venv) PS D:\pythonProject\env_api> python ma…

pandas教程:Date and Time Data Types and Tools 日期和时间数据类型及其工具

文章目录 Chapter 11 Time Series&#xff08;时间序列&#xff09;11.1 Date and Time Data Types and Tools&#xff08;日期和时间数据类型及其工具&#xff09;1 Converting Between String and Datetime&#xff08;字符串与时间的转换&#xff09; Chapter 11 Time Serie…

Unity——URP相机详解

2021版本URP项目下的相机&#xff0c;一般新建一个相机有如下组件 1:Render Type(渲染类型) 有Base和Overlay两种选项&#xff0c;默认是Base选项 Base:主相机使用该种渲染方式&#xff0c;负责渲染场景中的主要图形元素 Overlay&#xff08;叠加&#xff09;:使用了Oveylay的…

JavaEE——简单认识HTML

文章目录 一、简单解释 HTML二、认识 HTML 的结构三、了解HTML中的相关标签1.注释标签2.标题标签3.段落标签 p4. 换行标签 br5.格式化标签6.图片标签解释 src解释 alt解释其他有关 img 标签的属性 7.超链接标签 a8.表格标签9.列表标签10.input 标签11. select 下拉菜单以及 div…