vector 排序_Rust 中对 vector 排序 Rust 实践指南

本文详细介绍了在 Rust 语言中如何对 Vector 进行排序,包括使用标准库的方法对 Vector 进行升序和降序排序,以及如何将排序后的 Vector 赋值给另一个 Vector。通过实例代码展示,帮助读者掌握 Rust 中的 Vector 操作技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

88c4e6ea1c7711b5e0255eeb0b782d8b.png

Rust 标准库 std 提供了对 vector 集合排序的方法,本文分别通过对整数 vector 、对浮点数 vector、对结构体 vector 这三方面排序,来对 Rust std crate 做一个初探。

da1c736cb49b136b8d0060d9d9a034cb.png

整数 Vector 排序
这个实例通过 vec::sort 对一个整数 Vector 进行排序。另一种方法是使用 vec::sort_unstable,后者运行速度更快一些,但不保持相等元素的顺序。
fn main() {    let mut vec = vec![1, 5, 10, 2, 15];        vec.sort();    assert_eq!(vec, vec![1, 2, 5, 10, 15]);}
浮点数 Vector 排序
f32 或 f64 的 vector,可以使用 vec::sort_by 和 PartialOrd::partial_cmp 对其进行排序。
fn main() {    let mut vec = vec![1.1, 1.15, 5.5, 1.123, 2.0];    vec.sort_by(|a, b| a.partial_cmp(b).unwrap());    assert_eq!(vec, vec![1.1, 1.123, 1.15, 2.0, 5.5]);}
结构体 Vector 排序
依据自然顺序(按名称和年龄),对具有 name 和 age 属性的 Person 结构体 Vector 排序。为了使 Person 可排序,你需要四个 traits:Eq、PartialEq、Ord,以及 PartialOrd。这些 traits 可以被简单地派生。你也可以使用 vec:sort_by 方法自定义比较函数,仅按照年龄排序。
#[derive(Debug, Eq, Ord, PartialEq, PartialOrd)]struct Person {    name: String,    age: u32}impl Person {    pub fn new(name: String, age: u32) -> Self {        Person {            name,            age        }    }}fn main() {    let mut people = vec![        Person::new("Zoe".to_string(), 25),        Person::new("Al".to_string(), 60),        Person::new("John".to_string(), 1),    ];    // Sort people by derived natural order (Name and age)    people.sort();    assert_eq!(        people,        vec![            Person::new("Al".to_string(), 60),            Person::new("John".to_string(), 1),            Person::new("Zoe".to_string(), 25),        ]);    // Sort people by age    people.sort_by(|a, b| b.age.cmp(&a.age));    assert_eq!(        people,        vec![            Person::new("Al".to_string(), 60),            Person::new("Zoe".to_string(), 25),            Person::new("John".to_string(), 1),        ]);}
以上实例代码都是完整的、可独立运行的程序,因此你可以直接复制它们到自己的项目中进行试验。如果希望从头了解如何运行上述实例代码,请参考《Rust 实践指南》中关于本书-如何使用本书实例部分。也可以复制链接:https://books.budshome.com/rust-cookbook/about.html也可以 73b83755f2192cd9eaff68f7f2860f7a.png 点击阅读原文进行更详细的学习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值