为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕田峪7331174 2022-09-12 16:59:03
我有一个问题调用函数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 })

请注意,在调用此命令之前,必须对切片进行排序,因为此系列函数在已排序的切片中执行二进制搜索。


查看完整回答
反对 回复 2022-09-12
?
陪伴而非守候

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

提醒:要使用搜索函数,数组应该已经排序。


查看完整回答
反对 回复 2022-09-12
?
呼如林

TA贡献1798条经验 获得超3个赞

sort.Search(len(arrInt), func(i int) bool { return arrInt[i] >= 10 })



查看完整回答
反对 回复 2022-09-12
  • 3 回答
  • 0 关注
  • 99 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号