新闻中心

如何使用Golang sort排序切片与数组_Golang sort排序方法与实践

2025-12-09
浏览次数:
返回列表
Go语言中sort包支持切片排序,提供sort.Ints等基础函数、sort.Slice自定义排序及实现sort.Interface接口三种方式,满足升序、降序和稳定排序等需求。

如何使用golang sort排序切片与数组_golang sort排序方法与实践

在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 GemDesign

AI高保真原型设计工具

GemDesign 652 查看详情 GemDesign

继续以 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.Intssort.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%  响应式容器内容自动缩放与宽高比维持教程 

搜索