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

sort.SearchInts工作异常,或者我丢失了一些东西

sort.SearchInts工作异常,或者我丢失了一些东西

Go
慕尼黑8549860 2021-05-07 14:15:47
考虑以下示例:package mainimport (    "fmt"    "sort")func main() {    var n int    var a sort.IntSlice    a = append(a, 23)       a = append(a, 3)    a = append(a, 10)    sort.Sort(a)        fmt.Println(a)    n = sort.SearchInts(a, 1)    fmt.Println(n)    n = sort.SearchInts(a, 3)    fmt.Println(n)}http://play.golang.org/p/wo4r43Zghv结果是:[3 10 23]00当第一个元素和不存在的元素都返回0作为索引时,我应该如何知道切片中是否存在数字?更新 注意,索引也可以大于切片的长度,因此查找切片中是否存在元素的正确方法是:num := 1n = sort.SearchInts(a, num) if n < len(a) && a[n] == num {  // found}
查看完整描述

3 回答

?
慕仙森

TA贡献1827条经验 获得超7个赞

它在功能上可能看起来很奇怪,但已记录在案:

例如,给定切片数据按升序排序,则调用Search(len(data),func(i int)bool {return data [i]> = 23})返回最小索引i,使得data [i]> = 23。

显而易见的解决方案也记录在案:

如果调用方想查找切片中是否包含23,则它必须分别测试data [i] == 23。


查看完整回答
反对 回复 2021-05-31
  • 3 回答
  • 0 关注
  • 318 浏览
慕课专栏
更多

添加回答

举报

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