转到sort.IntSlice()实现



我正在研究如何对Go数组进行反向排序:

sort.Sort(sort.Reverse(sort.IntSlice(s))) // s is the slice of ints

我在上查看了go文档的排序软件包https://godoc.org/sort

我看到有一种类型的IntSlice,但没有IntSlice((方法用于排序包

有人能解释一下IntSlice((是如何实现的吗?或者为什么它没有出现在排序pkg中?

所以在写这个问题的时候,我查看了IntSlice类型的源代码,并意识到IntSlice((不是sort-pkg的函数,而是[]int So sort的别名。IntSlice将slice s类型转换为IntSlice。

我们之所以需要将[]int转换为IntSlice类型,是因为sort.Reverse((需要一个Interface类型,并且必须实现[]int没有实现的Len((、Swap((、Less((。

这也让我想起了Donovan&Kernighan在谈到接口时写道,我们可能不能修改具体的类型,但我们可以通过接口扩展功能,我很高兴看到这是一个例子,b/c[]int是Go语言规范的一部分,但排序pkg通过接口扩展了行为。

最新更新