新闻中心
如何使用Golang sort排序切片与数组_Golang sort排序方法与实践
Go语言中sort包支持切片排序,提供sort.Ints等基础函数、sort.Slice自定义排序及实现sort.Interface接口三种方式,满足升序、降序和稳定排序等需求。

在Go语言中,sort 包提供了对切片和数组进行排序的高效方法。虽然Go不支持直接对数组排序(因为数组大小固定且传参时是值传递),但通过 sort 包可以轻松处理切片,而切片正是操作数组的主要方式。掌握 sort 的使用,能让你快速实现升序、降序、自定义排序等常见需求。
基本类型切片排序
对于常见的基本类型如 int、float64、string,sort 包提供了专用函数:
- sort.Ints():对整型切片升序排序
- sort.Float64s():对 float64 切片升序排序
- sort.Strings():对字符串切片按字典序升序排序
这些函数会直接修改原切片,无需返回新切片。
示例:ints := []int{3, 1, 4, 1, 5}
sort.Ints(ints)
fmt.Println(ints) // 输出: [1 1 3 4 5]
strs := []string{"banana", "apple", "cherry"}
sort.Strings(strs)
fmt.Println(strs) // 输出: [apple banana cherry]
自定义排序:使用 sort.Slice()
当元素是结构体或需要按特定规则排序时,可使用 sort.Slice(),它接受一个比较函数 func(i, j int) bool,当 i 应排在 j 前面时返回 true。
比如按学生分数从高到低排序:
type Student struct {
Name string
Score int
}
students := []Student{
{"Alice", 85},
{"Bob", 92},
{"Charlie", 78},
}
sort.Slice(students, func(i, j int) bool {
return students[i].Score > students[j].Score // 降序
})
// 结果: Bob(92), Alice(85), Charlie(78)
若想按姓名字母顺序升序,改为:return students[i].Name 。
实现 sort.Interface 自定义类型
对于频繁使用的自定义类型,可以实现 sort.Interface 接口,包含 Len()、Less(i, j)、Swap(i, j) 三个方法。
GemDesign
AI高保真原型设计工具
652
查看详情
继续以 Student 为例:
type ByScore []Student
func (a ByScore) Len() int { return len(a) }
func
(a ByScore) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
func (a ByScore) Less(i, j int) bool { return a[i].Score < a[j].Score }
// 使用
sort.Sort(ByScore(students))
这种方式适合需要复用排序逻辑的场景,代码更清晰。
反向排序与稳定排序
如果要对已有规则取反,比如升序变降序,可用 sort.Reverse() 包装:
sort.Sort(sort.Reverse(ByScore(students))) // 按分数降序
而 sort.Stable() 保证相等元素的相对顺序不变,适用于需要保持原始顺序的稳定排序场景。
基本上就这些。掌握 sort.Ints、sort.Slice 和自定义 sort.Interface,就能应对大多数排序需求。实际开发中,sort.Slice 因其简洁性最常用,尤其适合一次性排序逻辑。理解这些方法后,Golang 中的排序就不再复杂了。
以上就是如何使用Golang sort排序切片与数组_Golang sort排序方法与实践的详细内容,更多请关注其它相关文章!
# golang
# go
# dz网站好难优化
# 重庆优质网站优化推广
# 成都网站建设潮州
# 东莞网站建设建站系统
# 洛阳网站包年推广怎么样
# 康平媒体网站建设
# 泗阳seo推广价格
# 建设银行网站加载不了
# 海曙区网站建设定制
# 中山抖音关键词搜索排名
# 适用于
# 已有
# 就能
# 检测方法
# 布尔
# 整型
# 如何使用
# 降序
# 自定义
# 升序
# apple
# app
# go语言
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
现代化 SciPy 一维插值:interp1d 的替代方案与最佳实践
Safari自带网页翻译功能怎么用 无需插件轻松看懂外文网站【方法】
4399网页游戏电脑版全新入口 4399电脑端在线玩指南
抖音DOU+怎么投最有效 抖音付费推广的ROI提升技巧
漫蛙MANWA漫画主页官方入口 漫蛙漫画最新在线阅读地址
uc浏览器网页版入口 uc浏览器网页版最新网址
c++中为什么推荐使用using替代typedef_c++现代化类型别名
处理嵌套交互式控件:前端可访问性指南
海棠电脑版入口_通过电脑访问海棠官网阅读
2026春节假期票务安排_2026春节放假购票指南
Win11怎么合并任务栏图标 Win11开启任务栏合并减少图标占空间【方法】
2026年发布! 美少女养成动作RPG《神剑少女战记》发布实机演示
wps文字怎么插入目录并自动更新_wps文字如何插入目录并自动更新方法
c++中的std::forward_list和std::list有什么不同_c++ forward_list与list区别分析
Spring Boot嵌入式服务器与J*a EE:功能支持深度解析
必由学官网快捷入口 必由学网页版在线学习平台
动漫共和国防屏蔽稳定域名-动漫共和国官方正版直达通道
AI抖音网页版免费视频入口 AI抖音网页端最新视频实时观看
谷歌浏览器怎么给标签页静音_Chrome标签静音快捷操作
小红书网页版入口链接分享 小红书官网直接进
AO3最新可访问网址 Archive of Our Own官方在线入口
初次安装JDK时环境变量如何正确配置_J*A_HOME与PATH设置规则讲解
Web Components中自定义开关组件状态同步的常见陷阱与解决方案
Python多线程中正确使用sigwait处理SIGALRM信号
c++ dfs和bfs代码 c++深度广度优先搜索算法
铁路12306改签能改到更早的车次吗_铁路12306改签提前车次规则
如何为你的Composer包编写自动化测试_集成PHPUnit到Composer的scripts工作流
离线运行Go语言之旅:本地部署与GOPATH配置指南
我的世界官方游戏入口 我的世界官网平台直达链接
J*a里如何使用forEach遍历Map_Map遍历方法说明
Python vgamepad库按键模拟:正确使用XUSB_BUTTON常量
Win11文件资源管理器卡顿怎么修 Win11重置资源管理器进程优化响应速度【修复方法】
理解Python模块与全局变量的作用域管理
QQ邮箱登录官网首页 腾讯QQ邮箱网页入口
HTML5原生日期选择器与jQuery UI:实现日期选择器的联动与程序化控制
windows10怎么关闭系统提示音_windows10彻底静音设置方法
谷歌浏览器无痕模式怎么开 Chrome开启无痕浏览设置方法【教程】
R星幕后开发视频泄露 包含《GTA6》等多款大作
多闪网页版在线观看免费入口_多闪官网访问入口
解决移动端滚动问题的overflow属性应用指南
vivo浏览器怎么扫描二维码 vivo浏览器内置扫一扫功能使用方法
iCloud登录入口网页版 苹果iCloud官网登录
J*a里如何使用N*igableMap进行导航操作_可导航Map操作技巧解析
学习通在线学习平台 学习通网页版直接进入课程中心
Lar*el如何生成PDF或Excel文件_Lar*el文档导出工具与使用教程
网易大神怎么保存别人动态的图片_网易大神动态图片保存方法
必由学网页版入口 必由学官方平台直接访问
深入理解J*aScript Promise异步执行与微任务队列
台积电1.4nm工艺A14瞄准2028:10年来性能提升80%
响应式容器内容自动缩放与宽高比维持教程


2025-12-09
浏览次数:次
返回列表
(a ByScore) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
func (a ByScore) Less(i, j int) bool { return a[i].Score < a[j].Score }
// 使用
sort.Sort(ByScore(students))