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

【Rust基础】排序和分组

排序

简单排序

  • 整数排序

    #[test]
    fn test_sort(){
        let mut list = vec![1, 5, 3, 2, 4];
        list.sort(); //✔
        assert_eq!(list, vec![1, 2, 3, 4, 5]);
    }
    
  • 小数排序

    #[test]
    fn test_sort(){
        let mut list = vec![1, 5, 3, 2, 4];
        //❌ 不能直接使用sort,因为f32和f64未实现Ord trait
        //list.sort();
        //✔ 可以使用sort_by,自定义排序规则
        list.sort_by(|a, b| a.partial_cmp(b).unwrap());
      	assert_eq!(list, vec![1., 2., 3., 4., 5.]);
    }
    

    💡partial_cmptotal_cmptotal_cmp接受NAN的比较,partial_cmp如未处理NAN会paninc;

  • struct排序

    #[test]
    fn test_struct_sort() {
        #[derive(Debug)]
        struct Person {
            name: String,
            age: i32,
        }
        let mut persons = vec![
            Person {
                name: "Alice".to_string(),
                age: 25,
            },
            Person {
                name: "Bob".to_string(),
                age: 30,
            },
            Person {
                name: "Charlie".to_string(),
                age: 20,
            },
        ];
    
        persons.sort_by(|a, b| a.age.cmp(&b.age));
        println!("sorted_persons: {:?}", persons);
        // sorted_persons: [Person { name: "Charlie", age: 20 }, Person { name: "Alice", age: 25 }, Person { name: "Bob", age: 30 }]
    }
    

分组

使用HashMap

#[test]
fn test_group() {
	// 按奇数和偶数分组
    let list = vec![1, 2, 3, 4, 5];
    let mut group = HashMap::new();
    list.iter().for_each(|x| {
        if x % 2 == 0 {
            group.entry("even").or_insert(vec![]).push(*x);
        } else {
            group.entry("odd").or_insert(vec![]).push(*x);
        }
    });
    println!("group:{:?}", group);
    // group:{"odd": [1, 3, 5], "even": [2, 4]}
}

使用itertools

#[test]
fn test_group_with_iter_tools() {
	// 按奇数和偶数分组
    let list = vec![1, 2, 3, 4, 5];
    let group = list
        .iter()
        .into_group_map_by(|&x| if x % 2 == 0 { "even" } else { "odd" });
    println!("group:{:?}", group);
}
//group:{"odd": [1, 3, 5], "even": [2, 4]}

相关文章:

  • Starship:快速且高度可定制的命令行框架!!
  • 【BERT和GPT的区别】
  • 国产编辑器EverEdit - Hex Dump插件:看到文本的另一面!
  • leetcode0031 下一个排列-medium
  • 中国人工智能产业:‘价值兑现期’的新征程
  • AI赋能实时安全背带监测解决方案
  • 链表题目2(leetcode24题)交换链表里面的节点
  • S32K144入门笔记(十):TRGMUX的初始化
  • 1.备战SISAP 2025挑战:调研2024挑战
  • 快速导出接口设计表——基于DOMParser的Swagger接口详情半自动化提取方法
  • Python数据结构——二维列表
  • 柯南ED35 Hello Mr. My Yesterday日文歌词附假名注音,祭奠逝去的青春
  • Apache SkyWalking 全链路监控系统深度解析
  • 目标检测基础知识(面试应对)
  • Linux如何在设备树中表示和引用设备信息
  • 案例驱动的 IT 团队管理:创新与突破之路:第一章 重构 IT 团队管理:从传统到创新-1.1.2远程协作与文化冲突
  • C#原型模式:通过克隆对象来优化创建过程
  • Kubernetes 控制平面详解 —— 探秘 API Server、Controller Manager、Scheduler 与 etcd
  • Netty基础—6.Netty实现RPC服务一
  • 89.HarmonyOS NEXT 应用安全与隐私保护指南:构建安全可靠的应用
  • frontpage可以做网站吗/职业培训机构排名前十
  • 北京发展和城乡建设委员会网站/韩国热搜榜
  • 优设网站怎么下载/seo技术分享免费咨询
  • 598网站建设/百度超级链数字藏品
  • 手机怎么登录自己做的网站/海外推广渠道都有哪些
  • 有什么网站可以做名片/西安网站定制开发