news 2026/4/27 12:22:38

golang中使用 sort.Interface 实现复杂多级排序

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
golang中使用 sort.Interface 实现复杂多级排序

举两个例子,说明 sort.Interface实现多级排序。

例子 1

学生成绩排序(先按成绩降序,成绩相同按姓名升序)

package main import ( "fmt" "sort" ) type Student struct { Name string Score int } type ByScoreAndName []Student func (s ByScoreAndName) Len() int { return len(s) } func (s ByScoreAndName) Swap(i, j int) { s[i], s[j] = s[j], s[i] } func (s ByScoreAndName) Less(i, j int) bool { // 第一级:按分数降序(分数高的排前面) if s[i].Score != s[j].Score { return s[i].Score > s[j].Score } // 第二级:分数相同时,按姓名升序 return s[i].Name < s[j].Name } func main() { students := []Student{ {"Alice", 85}, {"Bob", 90}, {"Charlie", 85}, {"David", 90}, } sort.Sort(ByScoreAndName(students)) for _, s := range students { fmt.Printf("%s: %d\n", s.Name, s.Score) } // 输出: // Bob: 90 // David: 90 // Alice: 85 // Charlie: 85 }

例子 2

员工排序(先按部门升序,部门相同按工资降序,工资相同按工号升序)

package main import ( "fmt" "sort" ) type Employee struct { ID int Department string Salary float64 } type ByDeptSalaryID []Employee func (e ByDeptSalaryID) Len() int { return len(e) } func (e ByDeptSalaryID) Swap(i, j int) { e[i], e[j] = e[j], e[i] } func (e ByDeptSalaryID) Less(i, j int) bool { // 第一级:按部门升序 if e[i].Department != e[j].Department { return e[i].Department < e[j].Department } // 第二级:部门相同时,按工资降序 if e[i].Salary != e[j].Salary { return e[i].Salary > e[j].Salary } // 第三级:工资相同时,按工号升序 return e[i].ID < e[j].ID } func main() { employees := []Employee{ {103, "Engineering", 75000}, {101, "Engineering", 80000}, {102, "Engineering", 80000}, {201, "Sales", 70000}, {202, "Sales", 75000}, } sort.Sort(ByDeptSalaryID(employees)) for _, emp := range employees { fmt.Printf("ID: %d, Dept: %s, Salary: %.2f\n", emp.ID, emp.Department, emp.Salary) } // 输出: // ID: 101, Dept: Engineering, Salary: 80000.00 // ID: 102, Dept: Engineering, Salary: 80000.00 // ID: 103, Dept: Engineering, Salary: 75000.00 // ID: 202, Dept: Sales, Salary: 75000.00 // ID: 201, Dept: Sales, Salary: 70000.00 }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/27 12:22:38

【超详细】大模型学习路线图,从入门到应用(建议收藏)

本文为非从业者提供了一条大模型学习的快速入门路径&#xff0c;强调入门难度不高且投入不大。文章从神经网络基础开始&#xff0c;逐步介绍CNN、RNN、Transformer结构&#xff0c;再到大模型原理、训练优化、部署应用等&#xff0c;最后涵盖GPU算力知识。作者建议采用工程师式…

作者头像 李华
网站建设 2026/4/27 12:22:37

GLM-ASR-Nano-2512:中文方言识别与低音量语音处理的最佳开源方案

GLM-ASR-Nano-2512是智谱Z.AI开源的1.5B参数语音识别模型&#xff0c;专注于中文方言识别和低音量语音处理&#xff0c;性能超越Whisper。支持粤语等多种方言&#xff0c;能识别低音量语音&#xff0c;错误率仅4.10%。适合企业会议转写、客服中心等场景&#xff0c;支持本地部署…

作者头像 李华
网站建设 2026/4/25 13:27:36

智能摄像头在智能车道路视频采集中的关键技术及应用解析

摄像头在智能车道路视频采集中的应用&#xff0c;主要依赖于其高精度图像捕捉、多角度采集、实时处理与传输以及智能分析等能力&#xff0c;以下是对其关键环节及技术要点的详细分析&#xff1a;一、摄像头在智能车道路视频采集中的核心作用高精度图像捕捉 &#xff1a;摄像头作…

作者头像 李华
网站建设 2026/4/19 11:35:27

学霸同款2026 AI论文写作软件TOP9:研究生开题报告必备测评

学霸同款2026 AI论文写作软件TOP9&#xff1a;研究生开题报告必备测评 2026年学术写作工具测评&#xff1a;为何需要这份榜单&#xff1f; 随着人工智能技术的不断进步&#xff0c;AI论文写作软件已成为研究生群体提升科研效率的重要工具。然而&#xff0c;市场上产品繁多&…

作者头像 李华
网站建设 2026/4/17 15:29:00

基于Java的工程机械设备智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ? 工程机械设备智慧管理系统主要功能模块涵盖机械设备档案管理、供应商管理和客户管理等&#xff0c;适用于普通员工和部门领导角色。该系统使用SpringMVC开发框架与MySQL数据库构建&#xff0c;旨在提高管理水平并优化资源配置效率。相较于…

作者头像 李华