Go by Example: Sorting by Functions

文章展示了如何在Go中通过实现sort.Interface接口的Len,Swap和Less方法,对字符串切片按字符串长度而非字母顺序进行排序。创建了一个byLength类型作为[]string的别名,并在该类型上定义了排序所需的方法。通过这个例子,读者可以学习到如何在Go中实现自定义排序逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

英文源地址
有时, 我们想要按自然顺序以外的方式对集合进行排序. 例如, 假设我们希望按字符串长度而不是字母顺序排序. 下面是一个Go中自定义排序的例子.

package main

import (
	"fmt"
	"sort"
)

// 为了在Go中按自定义函数排序, 我们需要一个相应的类型
// 这里我们创建了一个byLength类型, 它只是内置的[]string类型的别名
type byLength []string

// 我们实现sort.Interface接口中需要的方法Len, Less和Swap,在我们自己的类型上
// 以便我们可以使用sort包的泛型Sort函数.
// Len和Swap在不同的类型之间通常是相似的, Less将保留实际的自定义排序逻辑.
// 在我们的例子中, 我们希望按照字符串长度递增的顺序排序, 所以我们在这里使用len(s[i])和len(s[j])

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])
}

func main() {
	// 所有这些就绪后, 我们现在可以通过将原始的fruits切片转换为byLength来实现自定义排序
	// 然后使用sort.Sort函数对输入的切片进行排序
	fruits := []string{"peach", "banana", "kiwi"}
	sort.Sort(byLength(fruits))
	fmt.Println(fruits)
}

运行我们的程序会显示一个按字符串长度排序的列表

$ go run sorting-by-functions.go 
[kiwi peach banana]

通过遵循创建自定义类型的相同模式, 在该类型上实现三个Interface方法, 然后调用sort.Sort对自定义类型的集合进行排序, 我们可以通过任意函数对Go切片进行排序.
下一节将介绍: Panic.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值