golang: sort.Search 找不到切片中的第一个元素
golang: sort.Search can't find first element in a slice
我已经写了一些代码来查找排序切片中的元素位置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。
这是一个错误吗?还是我错了?
谢谢。
如果您想搜索第一个元素,那么在您的比较器函数中,您应该将 i
th 元素与第一个元素 data[0]
(或值为 1
)。
并且由于您的切片是按升序排序的,因此您必须使用 >=
运算符进行比较,因为 sort.Search()
returns i
中的最小索引 [0, n)
其中 f(i)
是 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.
上试用
我已经写了一些代码来查找排序切片中的元素位置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。 这是一个错误吗?还是我错了?
谢谢。
如果您想搜索第一个元素,那么在您的比较器函数中,您应该将 i
th 元素与第一个元素 data[0]
(或值为 1
)。
并且由于您的切片是按升序排序的,因此您必须使用 >=
运算符进行比较,因为 sort.Search()
returns i
中的最小索引 [0, n)
其中 f(i)
是 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.