news 2026/9/3 2:51:09

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/9/2 22:54:23

答辩现场,评审组教授最不满意的 5 种回答方式,切记!切记!切记!

很多同学在答辩结束后都会说一句话&#xff1a;“其实我都会&#xff0c;但不知道为什么老师一直追问。”问题往往不在不会&#xff0c; 而在回答方式不对。站在评审组教授的角度&#xff0c; 下面这 5 种回答方式&#xff0c; 是最容易让他们皱眉、甚至继续追问的。一、“这个…

作者头像 李华
网站建设 2026/9/2 20:02:07

程序员必看!企业级私有化部署开源大模型选型与实战指南(建议收藏)

文章介绍了支持私有化部署的开源大模型选型与部署指南&#xff0c;包括国际主流和中文优秀模型。详细分析了个人开发、中小企业和大规模生产三种场景下的硬件配置、软件框架和性价比方案&#xff0c;帮助企业和开发者根据需求选择合适的模型和部署架构&#xff0c;实现数据安全…

作者头像 李华
网站建设 2026/9/2 19:27:08

从零开始:Gitee 仓库创建与本地项目纳管全流程详解

目录 一、Gitee 仓库创建:打好代码托管的基础 1.1 准备工作 1.2 仓库创建步骤 二、本地生成 SSH 公钥:实现免密提交代码 2.1 SSH 公钥的作用原理 2.2 本地生成 SSH 公钥的步骤 步骤 1:检查 Git 环境 步骤 2:打开命令行工具 步骤 3:执行生成公钥的命令 2.3 将公钥…

作者头像 李华
网站建设 2026/9/2 15:34:57

走向全栈:前后端状态认知差异与设计边界的深度探讨

文章目录 引言&#xff1a;为何关注前后端状态认知差异全栈开发的兴起与前后端分离的现状状态管理在现代应用中的重要性前后端协作中的常见误解 登录态的归属&#xff1a;前端状态还是后端状态&#xff1f;登录态的定义与实现方式前端如何管理登录态后端对登录态的支持与要求案…

作者头像 李华