我刚刚开始掌握 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
在调用后似乎已排序。
- 1 回答
- 0 关注
- 165 浏览
添加回答
举报
0/150
提交
取消