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

[Rust] 求Vec中的最值、统计特定值的数量和统计数组总和

一、简介

本文以Vec<i32>为例,介绍了在Rust中如何求 Vec<T>容器中中最大值最小值,如何确定特定值的下标、如何统计其中特定值的数量统计数组元素的总和

二、代码

0. Rust 中 Vec<T> 是什么?

在Rust中 Vec<T>为动态数组类型,跟C++中的vector<T>容器类似。对Vec<T>的详细介绍不是本文的主要内容,因此本文在此只简单介绍几种Vec<T>初始化的方法。

fn main() {// 1. 使用 Vec::new() 初始化let mut a: Vec<i32> = Vec::new();for i in 0..5 {a.push(i);}println!("a:{:?}", a);// 2. 使用 vec![] 宏 初始化 b = [0,1,2,3,4]let b: Vec<i32> = vec![0, 1, 2, 3, 4];println!("b:{:?}", b);// 3. 使用 vec![] 宏 初始化 b = [0,0,0,0,0]let c: Vec<i32> = vec![0; 5];println!("c:{:?}", c);
}

运行结果如下:

a:[0, 1, 2, 3, 4]
b:[0, 1, 2, 3, 4]
c:[0, 0, 0, 0, 0]

1. 求 Vec<T> 中的最大值、最小值

fn main() {let a = vec![0, 1, 2, 4, 5, 6, 7, 8, 9];let max_val = match a.iter().max() {Some(max_val) => max_val,_ => panic!("Failed to get maximum value of vec."),};println!("The maximum value of vec a is {}.", max_val);let min_val = match a.iter().min() {Some(min_val) => min_val,_ => panic!("Failed to get minimum value of vec."),};println!("The minimum value of vec a is {}.", min_val);
}

运行结果如下:

The maximum value of vec a is 9.
The minimum value of vec a is 0.

2. 求 Vec<T> 中的特定值的下标

fn main() {let a = vec![0, 1, 2, 4, 5, 6, 7, 8, 9];// 查找 值为"6"的第一个下标let index = match a.iter().enumerate().find(|(_, &x)| x == 6) {Some(enum_val) => enum_val.0,_ => panic!("asd"),};println!("The index of target value is :{}", index);
}

运行结果如下:

The index of target value is :5

3. 统计 Vec<T> 中特定值的数量

fn main() {let a = vec![0, 1, 1, 1, 5, 6, 7, 8, 9];// 统计 a 中值为"1"的元素个数let count = a.iter().filter(|&&x| x==1).count();println!("The number of target value is :{}", count);
}

运行结果如下:

The number of target value is :3

4. 统计 Vec<T> 中元素的总和

fn main() {let a = vec![0, 1, 1, 1, 5, 6, 7, 8, 9];let sum_a: i32 = a.iter().sum(); // 必须指定 sum_a 的数据类型,因为 sum() 作为一个 trait,并不是 Vec<f32> 的 method,无法确定最终总和的数据类型println!("The sum of vec a is {}.", sum_a);let b = vec![0.0f32, 1.0f32, 2.0f32, 3.0f32, 4.0f32];let sum_b: f32 = b.iter().sum(); // 必须指定 sum_b 的数据类型,因为 sum() 作为一个 trait,并不是 Vec<f32> 的 method,无法确定最终总和的数据类型println!("The sum of vec b is {}.", sum_b);
}

运行结果如下:

The sum of vec a is 38.
The sum of vec b is 10.

三、参考

[1.] OpenAi-ChatGPT

相关文章:

  • 软设之需求分析的工具
  • C++格式化库fmt使用方法
  • win10下使用docker和VMware
  • 高考毕业季--浅谈自己感想
  • 基于PPO的强化学习超级马里奥自动通关
  • 【Python】数据处理:Matplotlib绘图
  • mysql和redis的双写一致性问题
  • Qt | QDataStream 类(数据流)
  • 敏捷=996/007?现实是……
  • 【通过新能源汽车的智慧数字底盘技术看计算机的相关技术堆栈?以后是软硬结合的全能程序员的天下,取代全栈(前后端都会的全栈程序员)】
  • 怎么做才能推动产业园区的数字化转型和升级
  • 独孤思维:每天做着自己不喜欢的工作,你不难受吗
  • uniapp面试题
  • 【docker hub镜像源失效】2024年6月6日 docker 国内镜像源失效
  • RestTemplate远程请求的艺术
  • JavaScript-如何实现克隆(clone)函数
  • AWS实战 - 利用IAM对S3做访问控制
  • Computed property XXX was assigned to but it has no setter
  • ES6--对象的扩展
  • JavaScript对象详解
  • Python学习笔记 字符串拼接
  • 创建一种深思熟虑的文化
  • 从零开始在ubuntu上搭建node开发环境
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 关于springcloud Gateway中的限流
  • 基于游标的分页接口实现
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 码农张的Bug人生 - 见面之礼
  • 那些年我们用过的显示性能指标
  • 山寨一个 Promise
  • 使用 @font-face
  • 王永庆:技术创新改变教育未来
  • 移动端解决方案学习记录
  • 正则表达式小结
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #include
  • #Linux(权限管理)
  • (1)SpringCloud 整合Python
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (LeetCode C++)盛最多水的容器
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (九十四)函数和二维数组
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (一)为什么要选择C++
  • (转)一些感悟
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET技术成长路线架构图
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [Android]How to use FFmpeg to decode Android f...