Go 排序。搜索,查找不在切片中的数字
我目前在我的项目中遇到了一个问题,我必须找到切片中不存在的编号。我在网站上找到了工作代码,效果很好。在我的项目中,我创建一个空块,让else语句完成所有工作。我试图修改代码以删除空块,但每次都出现错误,我最终找到了一个重现问题的示例: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
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,它是正确的。