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

时间:2015-08-02 21:05:47

标签: sorting go casting

我刚刚开始掌握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类型,或者我是否需要计算一些复制开销?

(编辑:删除了规范的摘录,不适合手头的情况)

1 个答案:

答案 0 :(得分:3)

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

因此转换应该不会产生比复制切片头(12或24个字节,取决于字大小)更多的开销,当将其打包为interface{}变量以便调用时,无论如何都会发生转换。 Sort。不会复制支持数组,这就是调用后severalThousandStrings似乎已排序的原因。