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

时间:2015-02-05 13:06:07

标签: go

我已经编写了一些代码来查找排序切片中的元素位置使用sort.Search,但它无法正确获取第一个元素的正确位置。

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
    }))
}

标准输出始终为3而不是0。 这是一个错误吗?或者我错了吗?

感谢。

1 个答案:

答案 0 :(得分:4)

如果要搜索第一个元素,那么在比较器函数中,您应该将i th 元素与第一个元素data[0](或值)进行比较这是1)。

由于您的切片按升序排序,因此您必须使用>=运算符进行比较,因为sort.Search()会返回i[0, n)处的最小索引f(i)。 {1}}是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]
}))

按预期输出:0。试试Go Playground