提问人:Eric 提问时间:4/2/2023 更新时间:11/16/2023 访问量:1509
排序。Sort() 与切片。排序()
sort.Sort() vs slices.Sort()
问:
给定一个 ,例如:[]int
is := []int{2, 4, 1, 3}
可以通过以下方式进行排序:
sort.Sort()
,例如:sort.Sort(sort.IntSlice(is))
slices.Sort()
,例如:slices.Sort(is)
我知道是经验,从.
除此之外,排序 an 时有什么区别吗,通常首选哪个?slices.Sort()
"golang.org/x/exp/slices"
[]int
答:
1赞
VonC
11/16/2023
#1
Andreas Auernhammer 的文章“SORTING STRINGS IN GO, FAST & SLOW”列出了这两个包之间的区别:
sort
使用函数进行比较,而Less(i, j int) bool
slices
使用 .Cmp func(a,b T) int
但是,使用切片包进行分拣比分拣包快约 70%。
[]int
sort
注意:这篇文章是关于对字符串进行排序的:
那么,为什么排序数字更快,但排序字符串更慢呢?
因为字符串。
比较:三向字符串比较可能会比较两个字符串两次,而包只比较两个字符串一次,并且编译器还不够聪明,无法用单个函数调用替换此模式。sort
但是对于 ,作为某种源代码。Ints()
显示:int
// 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)) }
在这种情况下,切片。排序[S ~[]E, E cmp.Ordered](x S)
仍然是新的最佳选择。
评论