func Search(n int, f func(int) bool) int
search使用二分法進行尋找,Search()方法回使用“二分尋找”演算法來搜尋某指定切片[0:n],並返回能夠使f(i)=true的最小的i(0<=i<n)值,並且會假定,如果f(i)=true,則f(i+1)=true,即對於切片[0:n],i之前的切片元素會使f()函數返回false,i及i之後的元素會使f()函數返回true。但是,當在切片中無法找到時f(i)=true的i時(此時切片元素都不能使f()函數返回true),Search()方法會返回n(而不是返回-1)。
Search 常用於在一個已排序的,可索引的資料結構中尋找索引為 i 的值 x,例如數組或切片。這種情況下,實參 f,一般是一個閉包,會捕獲所要搜尋的值,以及索引並排序該資料結構的方式。
為了尋找某個值,而不是某一範圍的值時,如果slice以升序排序,則 f func中應該使用>=,如果slice以降序排序,則應該使用<=. 例子如下:package main
package main import ( "fmt" "sort" ) func main() { a := []int{1, 2, 3, 4, 5} b := sort.Search(len(a), func(i int) bool { return a[i] >= 30 }) fmt.Println(b) //5,尋找不到,返回a slice的長度5,而不是-1 c := sort.Search(len(a), func(i int) bool { return a[i] <= 3 }) fmt.Println(c) //0,利用二分法進行尋找,返回合格最左邊數值的index,即為0 d := sort.Search(len(a), func(i int) bool { return a[i] == 3 }) fmt.Println(d) //2 }