当前位置: 首页 > news >正文

golang学习笔记:标准库sort

Go 语言的 sort 包提供了切片和用户定义集合的排序功能。

常用方法

基本排序操作

1.内置类型排序

// 整数切片排序
ints := []int{4, 2, 7, 1, 9, 3}
sort.Ints(ints)                    // [1 2 3 4 7 9]// 检查是否已排序
isSorted := sort.IntsAreSorted(ints) // true// 浮点数切片排序
floats := []float64{3.2, 1.8, 5.4, 2.1}
sort.Float64s(floats)              // [1.8 2.1 3.2 5.4]// 字符串切片排序
strings := []string{"banana", "apple", "cherry"}
sort.Strings(strings)              // ["apple" "banana" "cherry"]

2.反向排序

ints := []int{4, 2, 7, 1, 9, 3}// 方法1:使用 sort.Reverse
sort.Sort(sort.Reverse(sort.IntSlice(ints)))
// [9 7 4 3 2 1]// 方法2:自定义比较函数
sort.Slice(ints, func(i, j int) bool {return ints[i] > ints[j]  // 降序
})

自定义排序

1.使用sort.Slice

type Person struct {Name stringAge  int
}people := []Person{{"Alice", 25},{"Bob", 30},{"Charlie", 20},
}// 按年龄排序
sort.Slice(people, func(i, j int) bool {return people[i].Age < people[j].Age
})
// [{Charlie 20} {Alice 25} {Bob 30}]// 按姓名排序
sort.Slice(people, func(i, j int) bool {return people[i].Name < people[j].Name
})
// [{Alice 25} {Bob 30} {Charlie 20}]

2.使用sort.SliceStable

// 稳定排序(保持相等元素的原始顺序)
people := []Person{{"Alice", 25},{"Bob", 30},{"Charlie", 25}, // 与 Alice 年龄相同
}sort.SliceStable(people, func(i, j int) bool {return people[i].Age < people[j].Age
})
// 保持 Alice 和 Charlie 的原始相对顺序

3.实现sort.Interface

// 自定义类型实现 sort.Interface
type ByAge []Personfunc (a ByAge) Len() int           { return len(a) }
func (a ByAge) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }
func (a ByAge) Less(i, j int) bool { return a[i].Age < a[j].Age }// 使用
people := []Person{{"Alice", 25},{"Bob", 30},{"Charlie", 20},
}
sort.Sort(ByAge(people))
// [{Charlie 20} {Alice 25} {Bob 30}]

搜索操作

1.二分查找

// 在已排序的切片中查找
ints := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}// 查找元素位置
index := sort.SearchInts(ints, 5)   // 4
index = sort.SearchInts(ints, 10)   // 9 (未找到,返回可插入位置)// 通用二分查找
index = sort.Search(len(ints), func(i int) bool {return ints[i] >= 5  // 查找第一个 >= 5 的元素
}) // 4

sort和slices

sort 包和 slices 包确实有很多功能重叠。sort包在Go1.0就存在,传统的排序方式;slices包在Go1.18引入,基于泛型的现代方式。

功能sortslices推荐
排序sort.Ints()slices.Sort()slices
检查排序sort.IntsAreSorted()slices.IsSorted()slices
二分查找sort.SearchInts()slices.BinarySearch()slices
自定义排序sort.Slice()slices.SortFunc()slices
稳定排序sort.SliceStable()slices.SortStableFunc()slices
查找元素需要手动实现slices.Index()slices
插入删除需要手动实现slices.Insert(), Delete()slices
http://www.dtcms.com/a/520769.html

相关文章:

  • VVIC 关键字搜索接口开发:快时尚场景下的智能分词与爆款优先排序实现
  • 数据结构——平衡二叉树
  • 基于Qt实现百度地图路径规划功能
  • 电力电子技术 第六章——磁元件模型
  • Qt+Qml客户端和Python服务端的网络通信原型
  • 个人音乐类网站服务器租借汉滨网站建设
  • Python“魔术方法”详解:self 与 other 的角色与交互
  • 每日SQL练习 -- 24年阿里(医院门诊复诊率与抗生素用药占比统计)
  • Vue项目中资源引入方式详解
  • 单页网站设计欣赏沪深300指数
  • 跨境一件代发平台温州seo关键词优化
  • mvc5网站开发网站长尾关键词排名软件
  • 阿里云渠道商:如何建立阿里云的权限模型?
  • 网站开发 只要凡科精选app
  • 玉溪市网站建设推广移动通信网站建设
  • 《算法通关指南之C++编程篇(5)----- 条件判断与循环(下)》
  • DarkZero
  • python 网站开发怎么部署龙岩有什么招聘本地网站
  • 上海兼职做网站淘宝友情链接怎么设置
  • 【Linux系统编程】程序替换:execve(execl、execlp、execle、execv、execvp、execvpe)
  • 西安市城乡房地产建设管理局网站wordpress国外主题修改
  • 巨鹿网站建设网络公司云南住房和建设厅网站
  • 前端八股文 | HTTP - 实时通信方式/前后端通信方式
  • 谈一谈ViewDragHelper的工作原理?
  • Flutter框架机制详解
  • 火山引擎推出Data Agent评测体系,并发布《2025数据智能体实践指南》
  • SpringBoot-Web开发之异常处理
  • wap网站和app的区别php网站后台建设
  • 舞阳网站建设如何引流被动加好友
  • js wordpress 菜单管理如何给网站做seo优化