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

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.Reversesort.Sort(sort.Reverse(sort.IntSlice(nums)))
若要排序结构体或自定义类型,需让该类型实现 sort.Interface 接口,即三个方法:Len()、Less(i, j int) bool、Swap(i, j int)。
更简便的方式是嵌入 sort.Slice(Go 1.8+)——它接受切片和一个比较函数:
立即学习“go语言免费学习笔记(深入)”;
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包和自定义函数的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号