sort.Search,寻找不在切片中的数字

Dip*_*ppo 4 go

我目前在我的项目中遇到一个问题,我必须找到切片中不存在的数字。我在golang网站上找到了工作代码,效果很好。在我的项目中,我创建了一个空块,并让 else 语句完成所有工作。我尝试更改代码以删除空块,但每次都会出错,我终于找到了一个重现问题的示例:

package main

import (
    "fmt"
    "sort"
)

func main() {
    data := []int{27, 15, 8, 9, 12, 4, 17, 19, 21, 23, 25}
    nr := 9
    sort.Ints(data)
    index := sort.Search(len(data), func(index int) bool { return data[index] == nr })
    if index == len(data) {
        fmt.Print("It's not in : ")
        fmt.Println(nr)
    } else {
        fmt.Print("It's in! Index is at : ")
        fmt.Println(index)
    }
}
Run Code Online (Sandbox Code Playgroud)

golang游乐场上的工作代码!

小智 5

我也遇到了同样的问题,因为我误解了godoc sort Search.

如果调用者想要查找 23 是否在切片中,则必须单独测试 data[i] == 23。

我认为这也意味着“文档说 == 是允许的”。事实上,在sort.Search函数中作为参数,只能用>=or <=,不能==。这句话的意思是在获得索引后i,您必须对其进行测试data[i] == 23以确保 23 在切片中。