Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 排序。搜索,查找不在切片中的数字_Go - Fatal编程技术网

Go 排序。搜索,查找不在切片中的数字

Go 排序。搜索,查找不在切片中的数字,go,Go,我目前在我的项目中遇到了一个问题,我必须找到切片中不存在的编号。我在网站上找到了工作代码,效果很好。在我的项目中,我创建一个空块,让else语句完成所有工作。我试图修改代码以删除空块,但每次都出现错误,我最终找到了一个重现问题的示例: package main import ( "fmt" "sort" ) func main() { data := []int{27, 15, 8, 9, 12, 4, 17, 19, 21, 23, 25} nr := 9

我目前在我的项目中遇到了一个问题,我必须找到切片中不存在的编号。我在网站上找到了工作代码,效果很好。在我的项目中,我创建一个空块,让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上的工作代码

例如

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

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

如果调用者想要找到23是否在片中,它必须分别测试数据[i]==23


我认为这也意味着“文档中说==是允许的”。事实上,在sort.Search中作为参数的函数中,只能使用
=
我认为您需要
func(index int)bool{return data[index]>=nr}
@4of4,它将创建与我当前使用的空块的原始代码相同的代码。文档中说,如果找不到,则允许使用==并且索引=len(数据)。但不知怎么的,它不起作用。我可能不明白这个问题。您希望示例程序的输出是什么?@4of4如果您检查golang Playerd链接,您会看到9在切片中,但sort.search告诉您它不在切片中。如果你试着找到27,它是正确的。