sort.Slice 是 Go 1.8 引入的灵活切片排序方式,支持任意类型切片按自定义逻辑排序,无需实现 sort.Interface;使用时需注意索引顺序、指针解引用及 Less 函数中避免耗时操作。
Go 1.8 引入的 sort.Slice 允许你对任意切片按自定义逻辑排序,无需实现 sort.Interface。它直接接收切片和一个比较函数(闭包),语义清晰、写法简洁。
常见错误是误传指针或搞错索引顺序,比如把 i > j 写成 i 导致逆序结果被当成正序。
bool:当 i 应排在 j 前面时返回 true
sort.Slice([]int{1,2}, ...) 会报错)ages := []int{32, 18, 45, 23}
sort.Slice(ages, func(i, j int) bool {
return ages[i] < ages[j] // 升序
})
// ages == []int{18, 23, 32, 45}
当你处理的是 []string、[]int、[]float64 这类标准类型切片时,直接用对应函数最快,它们底层做了优化,比 sort.Slice 略快且更安全(不会因闭包捕获错误变量引发隐患)。
注意:这些函数**不支持自定义规则**。比如想按字符串长度排序 []string,就不能用 sort.Strings,必须退回 sort.Slice。
sort.Strings 按字典序升序;sort.Ints 按数值升序sort.Floats 的逆序版本,要降序需配合 sort.Reverse
[]*string 或含空值的切片,这些函数会 panic,得自己判空names := []string{"zoe", "amy", "bob"}
sort.Strings(names) // ["amy", "bob", "zoe"]
当排序依据不唯一(比如按结构体的某个字段排序,多个元素该字段值相同),而你又需要保持它们原来的先后顺序时,必须用 sort.SliceStable。普通 sort.Slice 不保证稳定性。
典型场景:先按分数降序,分数相同时按提交时间升序——第二级排序依赖原始顺序,否则时间信息会被打乱。
sort.Slice(稳定排序算法开销稍大)sort.Slice 完全一致sort.SliceStable 和 sort.Stable 提供稳定性保障type Student struct {
Name string
Score int
}
students := []Student{{"a", 85}, {"b", 92}, {"c", 85}}
sort.SliceStable(students, func(i, j int) bool {
return students[i].Score > students[j].Score // 高分在前
})
// "a" 和 "c" 分数相同,"a" 仍排在 "c" 前面
对结构体切片排序,没有像 Python 的 key= 那样一键指定字段的方式。最直接的是用 sort.Slice + 闭包;如果同一结构体在多处按同一规则排序,可考虑实现 sort.Interface 接口,复用性更高。
容易忽略的点是:闭包里访问结构体字段时,若切片元素是指针([]*T),记得解引用;若忘了加 *,可能静默排序失败(比如比较的是地址而非值)。
Len()、Less(i,j)、Swap(i,j) 三个方法即可*[]T),避免复制大切片Less 中做耗时操作(如网络请求、文件读取),它会被频繁调用fruits := []struct{ Name string; Price float64 }{
{"apple", 2.5}, {"banana", 1.8}, {"cherry", 3.2},
}
sort.Slice(fruits, func(i, j int) bool {
return fruits[i].Price < fruits[j].Price
})
Go 的排序设计偏向显式与可控,没有“魔法”式的默认行为。真正复杂的地方往往不在怎么写,而在于:是否意识到相等元素的顺序会影响业务逻辑,以及是否在比较函数里无意引入了副作用或越界访问。
# python
# go
# golang
# app
# apple
# 排序算法
# 标准库
相关文章:
建站之星如何修改网站生成路径?
济南网站制作的价格,历城一职专官方网站?
高端建站如何打造兼具美学与转化的品牌官网?
如何基于云服务器快速搭建个人网站?
建站主机功能解析:服务器选择与快速搭建指南
如何在Tomcat中配置并部署网站项目?
建站之星如何快速更换网站模板?
电商平台网站制作流程,电商网站如何制作?
如何快速上传自定义模板至建站之星?
,柠檬视频怎样兑换vip?
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
建站之星Pro快速搭建教程:模板选择与功能配置指南
网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?
如何制作网站标识牌,动态网站如何制作(教程)?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
如何在橙子建站上传落地页?操作指南详解
如何在VPS电脑上快速搭建网站?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
建站主机选择指南:服务器配置与SEO优化实战技巧
如何快速登录WAP自助建站平台?
简易网站制作视频教程,使用记事本编写一个简单的网页html文件?
新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?
北京制作网站的公司,北京铁路集团官方网站?
个人网站制作流程图片大全,个人网站如何注销?
如何通过西部建站助手安装IIS服务器?
建站之星后台密码如何安全设置与找回?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
微课制作网站有哪些,微课网怎么进?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
如何在自有机房高效搭建专业网站?
已有域名如何免费搭建网站?
历史网站制作软件,华为如何找回被删除的网站?
寿县云建站:智能SEO优化与多行业模板快速上线指南
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
如何在阿里云部署织梦网站?
临沂网站制作企业,临沂第三中学官方网站?
行程制作网站有哪些,第三方机票电子行程单怎么开?
如何选择建站程序?包含哪些必备功能与类型?
安云自助建站系统如何快速提升SEO排名?
北京企业网站设计制作公司,北京铁路集团官方网站?
如何通过云梦建站系统实现SEO快速优化?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
如何在阿里云高效完成企业建站全流程?
如何快速搭建个人网站并优化SEO?
公司网站设计制作厂家,怎么创建自己的一个网站?
如何在Golang中使用replace替换模块_指定本地或远程路径
如何在香港免费服务器上快速搭建网站?
高性能网站服务器配置指南:安全稳定与高效建站核心方案
广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?
b2c电商网站制作流程,b2c水平综合的电商平台?
*请认真填写需求信息,我们会在24小时内与您取得联系。