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


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

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

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

基础排序:升序与降序

sort 包提供了针对常见类型的快捷排序函数,如 sort.Ints、sort.Float64s、sort.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) bool、Swap(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.SearchInts、sort.SearchStrings、sort.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 】


相关推荐: 百度地图离线地图无法加载如何解决 百度地图离线地图加载优化方法  Animex动漫社正版在线入口 Animex动漫社动漫官方观看网  Linux如何开发轻量级数据服务模块_Linux服务化设计  Yandex俄罗斯搜索引擎官网入口 Yandex网页端直接访问  QQ邮箱注册地址 免费获取QQ邮箱账号  解决Windows上Composer PATH变量冲突导致的命令无法识别问题  iSpring三分屏制作教程  Pandas中基于动态偏移量实现DataFrame列值位移的策略  德邦快递会员怎么开通  Win10输入法不见了怎么办 Win10找回语言栏图标教程  4399造梦西游3无敌版_4399游戏入口  Firefox OS应用开发:解决XMLHttpRequest跨域请求阻塞问题  word怎么将图片设置为页面背景并不影响打印_Word图片背景设置方法  PHP utf8_encode 字符编码转换疑难解析与最佳实践  使用TinyButStrong生成HTML并结合Dompdf创建PDF教程  发布小红书怎么屏蔽粉丝?屏蔽粉丝能看到吗?  Golang中的rune与byte类型区别是什么_Golang字符与字节处理详解  汽水音乐在线听歌网页版 汽水音乐在线听歌网页版入口  Sublime Text怎么关闭自动完成_Sublime禁用Auto Complete设置  php如何实现多域名共享session_php存储session到redis与跨域读取配置  汽水音乐网页端访问 汽水音乐官方网页直达  快递物流路径揭秘  BunnyStream TUS视频上传指南:解决401认证错误与参数配置  解决Flex容器横向滚动内容截断与偏移问题  德邦快递查询入口登录官网 德邦快递单号查询系统入口  英雄联盟争者留名活动介绍  iPhone 14 Pro如何更改区域设置_iPhone 14 Pro地区语言修改教程  PyEZ 配置提交中 RpcTimeoutError 的健壮性处理策略  猫眼电影app如何筛选支持退改签的影院_猫眼电影退改签影院筛选方法  纯CSS实现自适应宽度与响应式布局的水平按钮组  微信注销后银行卡解绑了吗_微信注销后银行卡解绑状态  Yandex无需登录畅游 俄罗斯搜索引擎最新官网指南  毒蘑菇VOLUMESHADER_BM官网首页登录入口 毒蘑菇VOLUMESHADER_BM官网首页登录入口说明  Chart.js 教程:自定义插件实现图表与图例间距调整  菜鸟裹裹怎样获得取件码_菜鸟裹裹获得取件码步骤  《波斯王子:失落的王冠》剑术大师打法攻略  word表格如何按某一列内容进行排序_Word表格按列排序方法  创建快捷方式启动系统保护  处理含命名空间的XML文件 Power Query中的高级技巧  使用Python和NLTK从文本中高效提取名词的实用教程  批改网网页版登录 批改网电脑版学生登录入口  谷歌邮箱官方入口链接 谷歌邮箱网页版电脑端快速登录  《跳跳舞蹈》循环播放方法  行者app怎样导出日志  Vue 3中独立响应式实例的创建与应用  QQ邮箱PC端登录页面_QQ邮箱网页版登录界面  J*aScript 数值去小数位处理:多种方法与实践  支付宝登录刷脸不是本人如何解决  晓晓优选app支付宝绑定方法  《全民k歌》网页版最新登录入口一览 

 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.