一、概述
本文将使用golang标准库中的sort包来对切片进行排序,包括基础数据和复杂数据。
二、基础数据排序
如果按升序对切片进行排序,可以使用sort.Ints()、sort.Float64()和sort.Strings()等方法。
对整型排序
nums := []int{6, 4, 5, 2, 8, 1}
sort.Ints(nums)
fmt.Println(nums)
输出结果:[1 2 4 5 6 8]
对浮点型排序
nums := []float64{4.2, 1.6, 5.3, 2.6, 9.6}
sort.Float64s(nums)
fmt.Println(nums)
输出结果:[1.6 2.6 4.2 5.3 9.6]
对字符串排序
data := []string{"apple", "Banana", "cherry", "Mango", "papaya"}
sort.Strings(data)
fmt.Println(data)
输出结果:[Banana Mango apple cherry papaya]
注:sort.Strings()是根据Unicode值对字段串中的元素进行排序,因为大写字母的Unicode值比小写字母的小,所以大写字母排在前面。
三、自定义数据结构排序
sort.Slice()可以通过less()函数的返回值来对切片进行排序。less()函数返回为i的元素是否必须排在索引为j的元素之前。
less(i, j int) bool
整型数据示例
nums := []int{3, 7, 8, 1, 5, 4}
sort.Slice(nums, func(i, j int) bool {
return nums[i] > nums[j]
})
fmt.Println(nums)
输出结果:[8 7 5 4 3 1]
自定义数据示例
type Person struct {
Name string
Age int
}
persons := []Person{
{"a", 18},
{"b", 20},
{"c", 16},
}
sort.Slice(persons, func(i, j int) bool {
return persons[i].Age > persons[j].Age
})
fmt.Println(persons)
输出结果:[{b 20} {a 18} {c 16}]
注:上面示例是按age倒序排列。
四、总结
本文简单举例使用sort包进行基本的排序操作,包括基础类型和自定义数据结构的排序,更多其他的排序功能,可以参考golang的官方文档。
本专栏知识点是通过<零声教育>的系统学习,进行梳理总结写下文章,对Go云原生课程感兴趣的读者,可以点击链接,详细查看详细的服务: https://ke.qq.com/course/422970?flowToken=1043281#term_id=100504894