golang:sort.Search在切片中找不到第一个元素

golang:sort.Search在切片中找不到第一个元素

问题描述:

I have write some code to find element position in sorted slice use sort.Search, but it can't correctly get the right position of first element.

package main

import (
    "fmt"
    "sort"
)

func main() {
    data := []int{1, 2, 3}
    fmt.Println(sort.Search(len(data), func(i int) bool {
        return data[i] < 2 // or data[i] == 1
    }))
}

The standard output is always 3 rather than 0. Is it a bug? Or am i wrong?

Thanks.

If you want to search for the first element, then in your comparator function you should compare the ith element to the first which is data[0] (or the value which is 1).

And since your slice is sorted in ascending order, you have to use the >= operator for comparision because sort.Search() returns the smallest index i in [0, n) at which f(i) is true.

data := []int{1, 2, 3}
fmt.Println(sort.Search(len(data), func(i int) bool {
    return data[i] >= data[0] // You could also use 1 instead of data[0]
}))

Output: 0 as expected. Try it on Go Playground.