Skip to Main Content
Go程序设计语言
book

Go程序设计语言

by 艾伦A. A.多诺万, 布莱恩W. 柯尼汉
August 2021
Beginner to intermediate content levelBeginner to intermediate
450 pages
6h 1m
Chinese
Pearson
Content preview from Go程序设计语言

7.6 使用sort.Interface来排序

与字符串格式化类似,排序也是一个在很多程序中广泛使用的操作。尽管一个最小的快排(Quicksort)只需15行左右,但一个健壮的实现长很多。所以我们无法想象在每次需要时都重新写一遍或者复制一遍。

幸运的是,sort包提供了针对任意序列根据任意排序函数原地排序的功能。这样的设计其实并不常见。在很多语言中,排序算法跟序列数据类型绑定,排序算法则跟序列元素类型绑定。与之相反的是,Go语言的sort.Sort函数对序列和其中元素的布局无任何要求,它使用sort.Interface接口来指定通用排序算法和每个具体的序列类型之间的协议(contract)。这个接口的实现确定了序列的具体布局(经常是一个slice),以及元素期望的排序方式。

一个原地排序算法需要知道三个信息:序列长度、比较两个元素的含义以及如何交换两个元素,所以sort.Interface接口就有三个方法:

要对序列排序,需要先确定一个实现了如上三个方法的类型,接着把sort.Sort函数应用到上面这类方法的实例上。我们先考虑几乎是最简单的一个例子:字符串slice。定义的新类型StringSlice以及它的Len、Less、Swap三个方法如下所示:

现在就可以对一个字符串slice进行排序,只须简单地把一个slice转换为StringSlice类型即可,如下所示: ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

C++语言导学(原书第2版)

C++语言导学(原书第2版)

本贾尼 斯特劳斯特鲁普
Go语言编程

Go语言编程

威廉·肯尼迪

Publisher Resources

ISBN: 9787111558422