为了账号安全,请及时绑定邮箱和手机立即绑定

golang:sort.Search 找不到切片中的第一个元素

golang:sort.Search 找不到切片中的第一个元素

Go
牧羊人nacy 2021-09-13 15:33:56
我已经编写了一些代码来使用 sort.Search 在排序切片中查找元素位置,但它无法正确获取第一个元素的正确位置。package mainimport (    "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。这是一个错误吗?还是我错了?
查看完整描述

1 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

如果您想搜索第一个元素,那么在您的比较器函数中,您应该将i第一个元素与第一个元素data[0](或值为1)进行比较。


而且,由于你的切片按升序排序,你必须使用>=运营商的对比,因为sort.Search()返回最小的指数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上试试。


查看完整回答
反对 回复 2021-09-13
  • 1 回答
  • 0 关注
  • 230 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信