我有一个问题调用函数sort.SearchInts(arrInt, 10)因为数组 (arrInt) 具有 int8 类型,我需要将数组转换为 int 类型。我想我可以走很长的路,在for循环中搜索一个元素,但它听起来很丑陋,我想有更好的方法来做到这一点。
3 回答
FFIVE
TA贡献1797条经验 获得超6个赞
sort.SearchInts只是一种方便的包装器。搜索 s 的切片。int
它的实现方式如下:
func SearchInts(a []int, x int) int { return Search(len(a), func(i int) bool { return a[i] >= x })
}因此,您可以创建一个自定义的“”函数,该函数对参数执行相同的操作:SearchInt8sint8
func 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 })请注意,在调用此命令之前,必须对切片进行排序,因为此系列函数在已排序的切片中执行二进制搜索。
陪伴而非守候
TA贡献1757条经验 获得超8个赞
数组是内存中相同大小的项的连续序列:
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
提醒:要使用搜索函数,数组应该已经排序。
- 3 回答
- 0 关注
- 99 浏览
添加回答
举报
0/150
提交
取消
