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

转换类型以进行排序:任何运行时成本?

转换类型以进行排序:任何运行时成本?

Go
开心每一天1111 2021-10-25 20:01:54
我刚刚开始掌握 Go(两天前开始,写了不到 1000 行),我仍然想知道一些习语。我需要按长度降序对一段字符串进行排序。我确实喜欢这样:func ... {    ... do business ...    sort.Sort(stringsLongestFirst(severalThousandStrings))    ... carry on and be happy, because it works ...}type stringsLongestFirst []stringfunc (b stringsLongestFirst) Len() int           { return len(b) }func (b stringsLongestFirst) Less(i, j int) bool { return len(b[i]) > len(b[j]) }func (b stringsLongestFirst) Swap(i, j int)      { b[j], b[i] = b[i], b[j] }首先,我想知道这是否是最惯用的方法。然后,最重要的是,我想知道在我编写stringsLongestFirst(severalThousandStrings). 字符串切片是否以某种方式被巧妙地重新解释为一种stringsLongestFirst类型,还是我必须计算一些复制开销?
查看完整描述

1 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

您要转换的类型既不是数字类型也不是字符串:[]string并且stringsLongestFirst是切片类型。

因此,转换不会产生比复制切片标头(12 或 24 字节,取决于字长)更多的开销,这在将其打包为interface{}变量以调用Sort. 后备数组不会被复制,这就是为什么severalThousandStrings在调用后似乎已排序。


查看完整回答
反对 回复 2021-10-25
  • 1 回答
  • 0 关注
  • 165 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信