package main
import (
"fmt"
"sort"
)
func main() {
a := []int{1, 2, 3, 4, 6, 7, 8}
x := 2
i := sort.SearchInts(a, x)
fmt.Printf("found %d at index %d in %v\n", x, i, a)
x = 5
i = sort.SearchInts(a, x)
fmt.Printf("%d not found, can be inserted at index %d in %v\n", x, i, a)
}
您将得到以下输出:
found 2 at index 1 in [1 2 3 4 6 7 8]
5 not found, can be inserted at index 4 in [1 2 3 4 6 7 8]
2条答案
按热度按时间dwbf0jvd1#
您可以简单地检查:
fhg3lkii2#
我没有使用你提到的函数,但是根据包的官方文档,
SearchInts
函数在一个排序的int切片中搜索x,并返回Search指定的索引。因此,基于文档中提供的示例,对于如下内容:
您将得到以下输出:
幸运的是,从GO的最新版本1.21开始,有一个新的slices包可用,其中包括
BinarySearch
函数,它的行为类似于您希望从Java中获得的(如果找到值,则返回bool
类型)。根据文件:BinarySearch在排序后的切片中搜索target,并返回找到target的位置,或target在排序顺序中出现的位置;它还返回一个bool,说明目标是否真的在切片中找到。切片必须按升序排序。
根据您的需要进行调整,您可以在计算条件时跳过
int
返回值,而只使用bool
值。举例来说:这将产生以下输出:
此外,这个函数使用泛型下划线,所以它不仅适用于
int
类型,还适用于任何其他类型。最后但并非最不重要的是,还有一个
BinarySearch
函数的替代版本,它允许您在BinarySearchFunc
上使用自己的比较函数。如果你需要一些自定义的比较逻辑,这可能对你也很有用。您可以在https://tip.golang.org/doc/go1.21上查看GO v1.21的完整发行说明,以防您想深入了解。