猿问

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

我刚刚开始掌握 Go(两天前开始,写了不到 1000 行),我仍然想知道一些习语。


我需要按长度降序对一段字符串进行排序。我确实喜欢这样:


func ... {

    ... do business ...


    sort.Sort(stringsLongestFirst(severalThousandStrings))


    ... carry on and be happy, because it works ...

}


type stringsLongestFirst []string


func (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类型,还是我必须计算一些复制开销?



开心每一天1111
浏览 166回答 1
1回答

繁花不似锦

您要转换的类型既不是数字类型也不是字符串:[]string并且stringsLongestFirst是切片类型。因此,转换不会产生比复制切片标头(12 或 24 字节,取决于字长)更多的开销,这在将其打包为interface{}变量以调用Sort. 后备数组不会被复制,这就是为什么severalThousandStrings在调用后似乎已排序。
随时随地看视频慕课网APP

相关分类

Go
我要回答