- Go语言入门
- Go语言开发环境安装配置
- Go语言程序结构
- Go语言基础语法
- Go语言数据类型
- Go语言变量
- Go语言常量
- Go语言运算符
- Go语言条件和决策
- Go语言循环
- Go语言函数
- Go语言作用域规则
- Go语言字符串
- Go语言数组
- Go语言指针
- Go语言结构体
- Go语言切片
- Go语言范围(range)
- Go语言映射
- Go语言递归
- Go语言类型转换
- Go语言接口
- Go语言错误处理
-
Go编程代码实例
- Hello World程序实例
- Go变量实例
- Go常量实例
- Go for循环语句实例
- Go if/else语句实例
- Go switch语句实例
- Go切片实例
- Go范围实例
- Go函数实例
- Go函数多个返回值实例
- Go可变参数的函数实例
- Go闭包(匿名函数)实例
- Go函数递归实例
- Go指针实例
- Go指针实例
- Go接口实例
- Go错误实例
- Go程序实例
- Go通道实例
- Go通道缓冲实例
- Go通道同步实例
- Go通道路线实例
- Go Select实例
- Go超时(timeouts)实例
- Go非阻塞通道操作实例
- Go关闭通道实例
- Go通道范围实例
- Go计时器实例
- Go断续器实例
- Go工作池实例
- Go速率限制实例
- Go原子计数器实例
- Go互斥体实例
- Go有状态的goroutines实例
- Go排序实例
- Go按自定义函数排序实例
- Go panic错误处理实例
- Go延迟(defer)实例
- Go集合函数实例
- Go字符串函数实例
- Go字符串格式化实例
- Go正则表达式实例
- Go JSON实例
- Go时间日期实例
- Go时代(Epoch)实例
- Go时间格式化/解析实例
- Go随机数实例
- Go数字解析实例
- Go URL解析实例
- Go SHA1哈希实例
- Go Base64编码实例
- Go读取文件实例
- Go写文件实例
- Go行过滤器实例
- Go命令行参数实例
- Go命令行标志实例
- Go环境变量实例
- Go执行过程实例
- Go信号实例
- Go退出程序实例
Go按自定义函数排序实例
有时候,我们希望通过除了自然顺序以外的其他方式对集合进行排序。例如,假设我们想按字符串的长度而不是字母顺序对字符串进行排序。下面是Go语言中自定义排序的示例。
为了使用Go语言中的自定义函数进行排序,我们需要一个相应的类型。这里创建了一个ByLength
类型,它只是内置 []string
类型的别名。
需要实现sort.Interface - Len
,Less
和Swap -
在这个类型上,所以可以使用 sort
包中的一般Sort
函数。Len
和Swap
通常在类型之间是相似的,Less
保存实际的自定义排序逻辑。在这个例子中,要按照字符串长度的增加顺序排序,因此在这里使用len(s [i])
和len(s [j])
。
所有这些都到位后,现在可以通过将原始 fruits
切片转换为ByLength
来实现自定义排序,然后对该类型切片使用sort.Sort()
方法。
运行程序根据需要显示按字符串长度排序的列表。
通过遵循创建自定义类型的模式,在该类型上实现三个Interface
方法,然后在自定义类型的集合上调用sort.Sort
,可以通过任意函数对Go切片进行排序。
所有的示例代码,都放在
F:\worksp\golang
目录下。安装Go编程环境请参考:/tutorial/detail-5562.html
sorting-by-functions.go
的完整代码如下所示 -
package main import "sort" import "fmt" // In order to sort by a custom function in Go, we need a // corresponding type. Here we've created a `ByLength` // type that is just an alias for the builtin `[]string` // type. type ByLength []string // We implement `sort.Interface` - `Len`, `Less`, and // `Swap` - on our type so we can use the `sort` package's // generic `Sort` function. `Len` and `Swap` // will usually be similar across types and `Less` will // hold the actual custom sorting logic. In our case we // want to sort in order of increasing string length, so // we use `len(s[i])` and `len(s[j])` here. func (s ByLength) Len() int { return len(s) } func (s ByLength) Swap(i, j int) { s[i], s[j] = s[j], s[i] } func (s ByLength) Less(i, j int) bool { return len(s[i]) < len(s[j]) } // With all of this in place, we can now implement our // custom sort by casting the original `fruits` slice to // `ByLength`, and then use `sort.Sort` on that typed // slice. func main() { fruits := []string{"peach", "banana", "kiwi"} sort.Sort(ByLength(fruits)) fmt.Println(fruits) }
执行上面代码,将得到以下输出结果 -
F:\worksp\golang>go run sorting-by-functions.go [kiwi peach banana]
上一篇:Go排序实例
下一篇:Go panic错误处理实例