方法名
sort.Search()
使用模板
index := sort.Search(n int,f func(i int) bool) int
主要功能
该函数使用二分查找的方法,会从[0, n)中取出一个值index,index为[0, n)中最小的使函数f(index)为True的值,并且f(index+1)也为True。
如果无法找到该index值,则该方法为返回n。
常用场景
该方法一般用于从一个已经排序的数组中找到某个值所对应的索引。
或者从字符串数组中,找到满足某个条件的最小索引值,比如etcd中的键值范围查询就用到了该方法。
具体例子
看该方法的描述会比较抽象,我们可以看两个具体的例子:
func main() {
a := []int{1,2,3,4,5}
d := sort.Search(len(a), func(i int) bool { return a[i]>=3})
fmt.Println(d)
}
执行结果:2
a := []byte("a")
b := []byte("ab")
c := []byte("ac")
d := []byte("acd")
e := []byte("ad")
f := []byte("abc")
g := [][]byte{a, b, c, d, e}
h := sort.Search(len(g), func(i int) bool { return bytes.Compare(g[i], f)>=0})
fmt.Println(h)
执行结果:2