猿问

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

我目前在我的项目中遇到一个问题,我必须找到切片中不存在的数字。我在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)

    }

}

golang操场上的工作代码!


Helenr
浏览 189回答 2
2回答

RISEBY

例如,package mainimport (    "fmt"    "sort")func main() {    data := []int{27, 15, 8, 9, 12, 4, 17, 19, 21, 23, 25}    sort.Ints(data)    fmt.Println(data)    x := 9    notpresent := false    i := sort.Search(len(data), func(i int) bool { return data[i] >= x })    if i >= len(data) || data[i] != x {        // x is not present in data,        // but i is the index where it would be inserted.        notpresent = true    }    fmt.Println(x, notpresent)}输出:[4 8 9 12 15 17 19 21 23 25 27]9 false

叮当猫咪

我也遇到同样的问题,因为我误解了godoc sort Search.如果调用者要查找切片中是否有 23,则必须单独测试 data[i] == 23。我认为这也意味着“文档说 == 是允许的”。实际上,在sort.Search中作为参数的函数中,只能使用>=or&nbsp;<=,不能使用==。这句话意味着在获得 index 之后i,您必须对其进行测试data[i] == 23以确保 23 在切片中。
随时随地看视频慕课网APP

相关分类

Go
我要回答