-1
基於此基於sort package的相當簡單的代碼。的o1
響應指數是無效的,因爲,因爲一個更大或等於運營商需要二進制搜索由@JimB指出在切片中搜索字符串時找不到句柄
l := []string{"o1", "o2", "o3"}
i1 := sort.Search(len(l), func(i int) bool { return strings.EqualFold(l[i], "o1") })
fmt.Println("o1:", i1) //PRINTS 3 - WRONG
https://play.golang.org/p/nUs-ozTYsY
工作的解決方案是:
l := []string{"o1", "o2", "o3"}
i1 := sort.Search(len(l), func(i int) bool { return l[i] >= "o1" })
fmt.Println("o1:", i1)
https://play.golang.org/p/WRsijy_xzV
但是,重要的是要記住重要的上次檢查。 The return value is the index to insert x
,這意味着你可以像結束了:
o1: 0 (index 0)
o2: 1
o3: 2
o777: 0 (Same 0 index!)
通過@JimB如指出,單獨檢查data[i] == 23
因此是很重要的。
if i < len(data) && ---> data[i] == x <--- {
x is present at data[i]
} else {
...
}
從搜索文檔'搜索使用二進制搜索找到並返回我最小的指數[0, n)在哪個f(i)是真實的。如果要測試項目是否在列表中,則必須單獨檢查。從同一文檔部分的例子:'如果調用者想要查找23是否在切片中,它必須單獨測試數據[i] == 23' – JimB
太棒了!這解釋了if檢查結束時的data [i] == x'。好東西。 – Custodio