https://stackoverflow.com/questions/68267991/

我有一个问题调用函数

sort.SearchInts(arrInt, 10)

因为数组 (arrInt) 具有 int8 类型,我需要将数组转换为 int 类型。我想我可以走很长的路,在for循环中搜索一个元素,但它听起来很丑陋,我想有更好的方法来做到这一点。


慕田峪7331174
浏览 100回答 3
3回答

FFIVE

sort.SearchInts只是一种方便的包装器。搜索 s 的切片。int它的实现方式如下:func SearchInts(a []int, x int) int {    return Search(len(a), func(i int) bool { return a[i] >= x }) }因此,您可以创建一个自定义的“”函数,该函数对参数执行相同的操作:SearchInt8sint8func SearchInt8s(a []int8, x int8) int {    return sort.Search(len(a), func(i int) bool { return a[i] >= x }) }或者(正如另一个答案已经说过的那样),只需使用排序。直接搜索:sort.Search(len(arrInt), func(i int) bool { return arrInt[i] >= 10 })请注意,在调用此命令之前,必须对切片进行排序,因为此系列函数在已排序的切片中执行二进制搜索。

陪伴而非守候

数组是内存中相同大小的项的连续序列:Array of int8: [1 byte][1 byte][1 byte][1 byte][1 byte]...如果我们需要整数数组(在amd64中典型为8个字节),我们有:Array of int: [8 bytes][8 bytes][8 bytes][8 bytes][8 bytes]...没有办法简单地从一种类型转换或转换为另一种类型,获取int数组的唯一方法是创建一个新的int数组并将所有值从int8转换为int。另一方面,如果您只需要在数组中搜索,则执行所有转换都是过度的,则最好的方法是创建一个函数 。SearchInt8这是泛型有用的地方,相同的算法将适用于具有相同操作的类型,但Golang缺少泛型。为了获得这个结果,golang附带了一个函数(https://golang.org/pkg/sort/#Search),该函数接受该函数作为第二个参数来实现您的类型的比较。sort.Search提醒:要使用搜索函数,数组应该已经排序。

呼如林

sort.Search(len(arrInt), func(i int) bool { return arrInt[i] >= 10 })
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go