Vec是Rust的可容器,Struct是结构体,也可以当类使用,这两个是Rust开发中比较常用的两个知识点,下面例子是结合ec与Struct,对ec里的Struct结构元素进行查找、排序、筛选等操作。
拿人员登记系统来做个示例,Person有姓名、年龄,身高、体重、性别,在操作的过程中往往会要求某个成员的某个元素进行筛选或者排序,查找某个元素是否存在等。

定义一个结构体

#[derive(Debug,Clone)]
pub struct Person
{name : String,  //姓名height : f32,   //身高age: u32,       //年龄weight : u8,    //体重gender : Gender,//性别
}

性别是一个枚举,因为等下要比较,enum加PartialEq这个 tauir

#[derive(Debug,Clone,PartialEq)]
pub enum Gender
{Male,Female,
}

实例化

     let mut persons : Vec<Person> = vec![];persons.push(Person::new("matt".to_string(),175.2,44, 24, Gender::Female));persons.push(Person::new("weid".to_string(),141.1,52, 24, Gender::Male));persons.push(Person::new("45ma".to_string(),154.5,45,19, Gender::Female));persons.push(Person::new("lele".to_string(),160.5,48,21, Gender::Male));persons.push(Person::new("json".to_string(),159.5,48,16, Gender::Male));

筛选元素

筛选出当前列表中的所有女性

pub fn retain(persons : &Vec<Person>, gender : Gender) -> Vec<Person>
{let mut ret_per : Vec<Person> = persons.clone();ret_per.retain(|p|p.gender == gender);ret_per
}

输出函数

pub fn show(persons : &Vec<Person>)
{for elem in persons{print!("{} - {} - {} - {} - {:?} \n",elem.name,elem.age,elem.height,elem.weight,elem.gender);}
}

浮点数排序

按身高排序

pub fn sort_height(persons : &Vec<Person>) -> Vec<Person>
{let mut vec_sort : Vec<Person> = persons.clone();vec_sort.sort_unstable_by(|a,b|a.height.partial_cmp(&b.height).unwrap());vec_sort
}

整数排序

按年龄排序

pub fn sort_age(persons : Vec<Person>) -> Vec<Person>
{let mut vec_sort : Vec<Person> = persons.clone();vec_sort.sort_unstable_by(|a,b|a.age.cmp(&b.age));vec_sort
}

判断成员元素

判断列表里面的名字是否存在

pub fn is_exists(persons : &Vec<Person>,name : String) ->bool
{persons.iter().any(|p|p.name == name)
}

查找结构里的元素

按名字查找

pub fn find_elem(persons : &Vec<Person>, name : String) ->Result<Person, ()>
{let index = persons.partition_point(|p|p.name == name);if index > 0{Ok(persons[index-1].clone())}else {Err(())}
}
……………………
let person = find_elem(&peoples, "matt".to_string());match person {Ok(v) => print!("{:?} \n",v),Err(()) => print!("error !"),}


排序上还有按字母排序的,这个方法官方都有给了,但不适用于结构体的容器,要就用就要按官方的原函数重写一遍,也可以自己遍历之后再实现都行,但官方给的方法在运行安全与速度上更靠谱一些。

Rust开发——Vec与Struct的使用示例相关推荐

  1. Rust开发——Vec向量

    1.Vec定义 1.1 向量是可调整大小的数组,可用于动态存储元素序列的数据结构.要求存储的元素必须具有相同的类型.如果需要存储不用类型,可以选择使用带有多个变量的枚举作为在向量中存储不同类型元素的方 ...

  2. 用 Rust 开发 Linux,可行吗?

    作者 | 马超 出品 | CSDN(ID:CSDNnews) 继Python之后,Rust最近也火爆得出了圈,目前Rust在Serverless等很多云原生领域已经稳定占据了C位,那么让Rust更进一 ...

  3. 百度安全 TrustZone SDK 正式成为 OP-TEE 官方推荐 Rust 开发环境

    百度安全与 OP-TEE 社区共同合作,推进 Teacalve TrustZone SDK 正式成为 OP-TEE 官方推荐的 Rust 开发环境.OP-TEE 是当今广泛使用的开源 ARM Trus ...

  4. [译]使用 Rust 开发一个简单的 Web 应用,第 4 部分 —— CLI 选项解析

    原文地址:A Simple Web App in Rust, Part 4 -- CLI Option Parsing 原文作者:Joel's Journal 译文出自:掘金翻译计划 本文永久链接:g ...

  5. 开发人员必备:微软发布示例代码浏览器 (Sample Browser) 第五版,让您尽享3500个示例代码...

    今天早上,微软一站式示例代码库 携手MSDN和微软创新空间 正式发布了示例代码浏览器(Sample Browser)第五版.这是继去年10月第四版发布以来的一次重大升级.有了它,3500多高质量示例代 ...

  6. rust开发环境_Rust 环境搭建

    Rust 环境搭建 Rust 支持很多的集成开发环境(IDE)或开发专用的文本编辑器. 本教程将使用 Visual Studio Code 作为我们的开发环境(Eclipse 有专用于 Rust 开发 ...

  7. Yii Framework 开发教程(32) Zii组件-GridView示例

     CGridView 以表格的形式显示数据,CGridView 也支持分页和排序,CGridView最基本的用法和ListView类型,也是通过设置 data provider,通常是CActiv ...

  8. Yii Framework 开发教程(30) Zii组件-ListView 示例

    CListView可以用来显示列表,CListView支持使用自定义的View模板显示列表的的记录,因此可以非常灵活的显示数据的表,这点有点像Android的ListView:-). CListVie ...

  9. Yii Framework 开发教程(31) Zii组件-DetailView 示例

     CDetailView为某个Model显示详细内容.这个要显示的Model可以为CModel或是关联数组. CDetailView通过配置 attributes来决定Model的那些属性需要显示 ...

最新文章

  1. 来自法国的山寨苹果系统——梨子系统PearOS,精美仿苹果风格的免费Linux操作系统(颇有iOS和OSX的神...
  2. bzoj2806: [Ctsc2012]Cheat
  3. postgresql 获取所有表名、字段名、字段类型、注释
  4. caffe学习(二):利用mnist数据集训练并进行手写数字识别(windows)
  5. Java8 lambda函数式编程
  6. 如何把项目改成微服务项目_【日记】148微服务项目第18天
  7. [渝粤教育] 西南科技大学 公共管理学 在线考试复习资料
  8. 微服务架构及其最重要的10个设计模式
  9. xmind编写测试用例
  10. 读书笔记——《解析卷积神经网络 ——深度学习实践手册(魏秀参)》
  11. javascript获取css行内样式
  12. python开发cms_基于Django的Python CMS---wagtail介绍
  13. ASC19启动:在培养超算人才的路上砥砺前行
  14. 北卡州立大学计算机科学硕士,2020年北卡罗来纳州立大学一年制硕士含金量
  15. 跨境电商的支付方式有哪些?
  16. 数据结构 c语言(严蔚敏) 总结 + 代码
  17. ailx10的hacknet攻略004
  18. 速度测量插件speed-measure-webpack-plugin
  19. 资源站点收集中......
  20. 我生于平凡,但不甘于平凡

热门文章

  1. 问道虚拟机 登陆不上去了?无法运行?如何解决?
  2. BS 476-33 标准的产品适用范围
  3. 前端使用google-protobuf传输数据
  4. 【学习笔记1】分布式计算技术及框架
  5. 钣金系统三维设计与工艺展开功能的实现
  6. 关于边坡规范中圆弧形滑面的边坡稳定性系数计算的理论
  7. 勒索变种有不变的特征吗?有相应的防护手段吗?
  8. 如何抠图更换背景?这两个方法你知道吗?
  9. android基础篇之Intent用法
  10. 亿信华辰:2022 数据治理领域十大关键词!