隐藏页面特效

sort.interface接口

一个内置的排序算法需要知道三个东西:序列的长度,表示两个元素比较的结果,一种交换两个元素的方式;这就是sort.Interface的三个方法: package sort type Interface interface{ Len() int Less(i, j int) bool Swap(i, j int) } 为了对序列进行排序,我们需要定义一个实现了这个三个方法的类型,然后对这个类型的一个实例应用sort.Sort函数。思考对一个字符串切片进行排序,这可能是最简单啊例子了。下面是这个新的类型StringSlice和它的Len,LessSwap方法 type StringSlice []string func (p StringSlice) Len() int {return len(p)} func (p StringSlice) Less(i, j int) bool {return p[i] < p[j]} func (p StringSlice) Swap(i, j int) {return p[i], p[j] = p[j], p[i]} 现在我们可以通过像下面这样将一个切片转换为一个StringSlice类型来进行排序: sort.Sort(StringSlice(names)) 这个转换得到一个相同长度,容量,和基于names数组的切片值;并且这个切片值的类型有三个排序需要的方法。 对字符串切片的排序是很常用的需要,所以sort包提供了StringSlice类型,也提供了Strings函数能让上面这些调用简化成sort.Strings(names) sort.Reverse函数将排序顺序转换成逆序 sort.Reverse函数值得进行更进一步的学习,因为它使用了结构体和接口的组合,这是一个重要的思路。sort包定义了一个不公开的struct类型reverse,它嵌入了一个sort.InterfacereverseLess方法调用了内嵌的sort.Interface值的Less方法,但是通过交换索引的方式使得排序结果变成逆序。 package sort type reverse struct { Interface } func (r reverse) Less(i, j int) bool { return r.Interface.Less(j, i) } func Reverse(data Interface) Interface { return reverse(data) } reverse的另外两个方法LenSwap隐式地由原有内嵌的sort.Interface提供。因为reverse是一个不公开的类型,所以导出函数Reverse返回一个包含原有sort.Interface值的reverse类型实例。 尽管对长度为n的序列排序需要O(n log n)次比较操作,检查一个序列是否已经有序至少需要n-1次比较。sort包中的lsSorted函数帮我们做这样的检查。像sort.Sort一样,它也使用sort.Interface对这个序列和它的排序函数进行抽象,但是它不会调用Swap方法,这段代码示范了IntsAreSortedInts函数在IntSlice类型上的使用: values := []int{3, 1, 4, 1} fmt.Println(sort.IntsAreSorted(value)) // "false" sort.Ints(values) fmt.Println(values) // "[1 1 3 4]" fmt.Println(sort.IntsAreSorted(values)) // true sort.Sort(sort.Reverse(sort.IntSlice(values))) fmt.Println(values) // [4 3 1 1] fmt.Println(sort.IntsAreSorted(values)) // false

__EOF__

本文作者404 Not Found
本文链接https://www.cnblogs.com/weiweivip666/p/15949199.html
关于博主:可能又在睡觉
版权声明:转载请注明出处
声援博主:如果看到我睡觉请喊我去学习
posted @   我在路上回头看  阅读(58)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示