如何使用Golang实现数组排序和搜索_使用sort包和自定义函数


Go语言中排序与搜索通过sort包实现,主要操作切片;提供Ints、Strings等升序函数及Reverse降序,支持Slice自定义排序和Search二分查找(要求已排序)。

如何使用golang实现数组排序和搜索_使用sort包和自定义函数

Go语言中数组(或切片)的排序与搜索主要通过标准库 sort 包完成。注意:Go 的数组是值类型且长度固定,实际开发中更常用的是切片(slice),而 sort 包所有函数都作用于切片。下面以切片为操作对象,介绍常用排序与搜索方法。

基础排序:升序与降序

sort 包提供了针对常见类型的快捷排序函数,如 sort.Intssort.Float64ssort.Strings,它们直接对切片原地升序排序。

  • 对整数切片升序:sort.Ints([]int{3, 1, 4, 1, 5}) → [1 1 3 4 5]
  • 对字符串切片升序:
    sort.Strings([]string{"zebra", "apple", "banana"}) → ["apple", "banana", "zebra"]</li>
      <li>降序需配合 <code>sort.Reverse
    :例如 sort.Sort(sort.Reverse(sort.IntSlice(nums)))

自定义类型排序:实现 sort.Interface

若要排序结构体或自定义类型,需让该类型实现 sort.Interface 接口,即三个方法:Len()Less(i, j int) boolSwap(i, j int)

更简便的方式是嵌入 sort.Slice(Go 1.8+)——它接受切片和一个比较函数:

Brev AI Brev AI

Brev.ai:搭载Suno AI V3.5技术的免费AI音乐生成器

Brev AI 437 查看详情 Brev AI
  • sort.Slice(people, func(i, j int) bool { return people[i].Age
  • sort.Slice(people, func(i, j int) bool { return people[i].Name > people[j].Name }) // 降序按姓名

二分搜索:仅适用于已排序切片

sort 包提供的搜索函数(如 sort.SearchIntssort.SearchStringssort.Search)均要求数据已升序排列,否则结果未定义。

  • 查找整数:i := sort.SearchInts([]int{1, 3, 5, 7, 9}, 5),返回首个 ≥ 目标值的索引(此处为 2)
  • 通用搜索:sort.Search(len(data), func(i int) bool { return data[i] >= target })
  • 注意:它不返回“是否找到”,而是插入位置;需手动判断 i 才算存在

注意事项与常见误区

排序和搜索在 Go 中是零拷贝、原地操作,但切片本身是引用类型,传参时仍需注意底层数组共享问题。

  • 排序修改原切片,如需保留原始顺序,请先复制:sorted := append([]int(nil), original...); sort.Ints(sorted)
  • sort.Search 的比较函数必须满足“前假后真”单调性,即存在一个边界 i,使得 f(0)...f(i-1) 为 false,f(i)...f(n-1) 为 true
  • 数组(如 [5]int)不能直接传给 sort 函数;需转为切片:sort.Ints(arr[:])

以上就是如何使用Golang实现数组排序和搜索_使用sort包和自定义函数的详细内容,更多请关注其它相关文章!


# golang  # go  # 的是  # 不同类型  # 布尔  # 降序  # 如何使用  # 自定义  # 标准库  # 排列  # apple  # app  # go语言  # 升序  # 深圳松岗新媒体营销推广  # 门头沟网站推广优化公司  # 抚远建设网站  # 520美容营销推广  # 北京网络营销推广的方式  # 酒店营销推广费占比  # 沙头网站优化营销策略  # 公司怎么做官方网站推广  # 楼凤seo  # 相关文章  # 请先  # 适用于  # 徐州网站建设与原理 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: sublime如何撤销关闭的标签页_sublime重新打开已关闭文件技巧  《战地6》反作弊已成功拦截240万次作弊 发售第一周98%比赛没有作弊  mysql镜像配置如何设置用户权限组_mysql镜像配置用户组与权限分级管理方法  海外搜索引擎推广效果怎么样,怎么分析效果!  《健康大兴》注册方法介绍  人教版电子教材在线获取指南  cad加载的线型看不见怎么办_cad线型不可见问题解决方法  邮编号码查询app有哪些_邮编号码查询推荐app及使用体验  Python实战:高效处理实时数据流中的最小/最大值  韩小圈网页版PC端入口 韩小圈网页版官方网站入口  纯CSS实现自适应宽度与响应式布局的水平按钮组  J*a里如何处理ArithmeticException并防止除零_算术异常防护策略解析  小米civi如何设置锁屏时间  海棠阅读登录教程_详细讲解海棠登录操作  感染了幽门螺杆菌一定会导致胃癌吗?蚂蚁庄园今日答案最新11.30  Selenium自动化:利用键盘模拟解决复杂日期输入框输入问题  TikTok收藏夹无法删除视频如何解决 TikTok收藏管理优化方法  Lar*el如何创建自定义的辅助函数(Helpers)_Lar*el全局函数定义与加载方法  在Peewee中处理PostgreSQL记录重复:一站式数据摄取教程  WooCommerce 新客户订单自动添加管理员备注教程  教资成绩怎么查询  Python对象引用与属性赋值:理解链表中的行为  使用AI在VS Code中将代码从一种语言翻译成另一种  c++如何掌握指针的核心用法_c++指针入门到精通指南  mysql中如何配置字符集和排序规则_mysql字符集排序配置  如何在CSS中设置背景图像:一个全面指南  Python项目中的条件导入:解决跨模块依赖问题  OpenWeatherMap API:通过城市名称获取天气预报数据指南  优化CSS动画与J*aScript定时器协同:构建稳定Toast提示  猫眼电影app如何设置电影上映提醒_猫眼电影上映提醒设置教程  HTML中多图片上传与预览:解决ID冲突的专业指南  FullCalendar自定义按钮样式定制指南  顺丰官方查单号入口 顺丰快递单号查询官网入口  macosmonterey系统外接显示器驱动怎么安装_macosmonterey外接显示器驱动与分辨率调整  抖音网页版官方链接 抖音网页版官网链接入口  composer 提示 "requires ext-soap" 缺少 SOAP 扩展怎么办?  《大学搜题酱》官网地址登录  《广发易淘金》国债逆回购操作教程  汽水音乐官网网页版入口 汽水音乐官网网页版在线入口  谷歌邮箱怎么换绑定邮箱Gmail安全备份邮箱修改方法  解决Go encoding/json 将JSON大数字解析为浮点数的问题  如何在CSS中实现盒模型多列间距_grid-gap与padding结合  电脑双系统如何安装和卸载 Windows和Linux双系统安装教程【详解】  Win11怎么录屏_Windows 11自带Xbox Game Bar录制视频  鲨鱼剧场app金币获取方法  J*a中逻辑运算符如何使用_逻辑与或非的基础用法讲解  wps文字怎么设置文字环绕图片的方式_wps文字如何设置文字环绕图片方式  在J*a中如何实现类的继承与方法重用_OOP继承方法重用技巧分享  《搜书吧》阅读书籍方法  sublime怎么在文件中显示代码结构大纲_sublime符号列表功能 

 2025-12-19

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.