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

考虑以下示例:


package main


import (

    "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]

0

0

当第一个元素和不存在的元素都返回0作为索引时,我应该如何知道切片中是否存在数字?


更新 注意,索引也可以大于切片的长度,因此查找切片中是否存在元素的正确方法是:


num := 1

n = sort.SearchInts(a, num) 

if n < len(a) && a[n] == num {

  // found

}


慕尼黑8549860
浏览 319回答 3
3回答

慕仙森

它在功能上可能看起来很奇怪,但已记录在案:例如,给定切片数据按升序排序,则调用Search(len(data),func(i int)bool {return data [i]> = 23})返回最小索引i,使得data [i]> = 23。显而易见的解决方案也记录在案:如果调用方想查找切片中是否包含23,则它必须分别测试data [i] == 23。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go