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

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

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

Go
Helenr 2021-08-23 17:10:27
我目前在我的项目中遇到一个问题,我必须找到切片中不存在的数字。我在golang网站上找到了工作代码,这很好用。在我的项目中,我创建了一个空块,让 else 语句完成所有工作。我试图更改代码以删除空块,但每次都出错,我最终找到了一个重现问题的示例:package mainimport (    "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操场上的工作代码!
查看完整描述

2 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

例如,


package main


import (

    "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


查看完整回答
反对 回复 2021-08-23
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

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

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

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


查看完整回答
反对 回复 2021-08-23
  • 2 回答
  • 0 关注
  • 188 浏览
慕课专栏
更多

添加回答

举报

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