给出
[]int
,例如:is := []int{2, 4, 1, 3}
可以通过以下方式排序:
sort.Sort()
,例如:
sort.Sort(sort.IntSlice(is))
slices.Sort()
,例如:
slices.Sort(is)
我知道
slices.Sort()
是经验,来自"golang.org/x/exp/slices"
。[]int
进行排序时有什么区别吗?通常优先选择哪一个?
来自 Andreas Auernhammer 的文章“SORTING STRINGS IN GO, FAST & SLOW”列出了两个包之间的区别:
和sort
套餐的区别在于:slices
使用sort
函数进行比较,而Less(i, j int) bool
使用slices
。Cmp func(a,b T) int
但是使用 slices 包对
进行排序比[]int
包快约 70%。sort
注意:本文是关于字符串排序的:
:三向字符串比较可能会比较两个字符串两次,而strings.Compare
包仅比较两个字符串一次,并且编译器还不够智能,无法用单个函数调用替换此模式。sort
但是对于
int
,如sort.Ints()
的源代码所示:
// Ints sorts a slice of ints in increasing order.
//
// Note: consider using the newer slices.Sort function, which runs faster.
func Ints(x []int) { Sort(IntSlice(x)) }
slices.Sort[S ~[]E, E cmp.Ordered](x S)
仍然是新的最佳选择。