我已经编写了一些代码来查找排序切片中的元素位置使用sort.Search,但它无法正确获取第一个元素的正确位置。
package main
import (
"fmt"
"sort"
)
func main() {
data := []int{1, 2, 3}
fmt.Println(sort.Search(len(data), func(i int) bool {
return data[i] < 2 // or data[i] == 1
}))
}
标准输出始终为3而不是0。 这是一个错误吗?或者我错了吗?
感谢。
答案 0 :(得分:4)
如果要搜索第一个元素,那么在比较器函数中,您应该将i
th 元素与第一个元素data[0]
(或值)进行比较这是1
)。
由于您的切片按升序排序,因此您必须使用>=
运算符进行比较,因为sort.Search()
会返回i
中[0, n)
处的最小索引f(i)
。 {1}}是true
。
data := []int{1, 2, 3}
fmt.Println(sort.Search(len(data), func(i int) bool {
return data[i] >= data[0] // You could also use 1 instead of data[0]
}))
按预期输出:0
。试试Go Playground。