电子商务网站建设价格,定制网站开发与模板,做网站用哪个服务器,简单的网站源码原文链接#xff1a; Go 语言中排序的 3 种方法
在写代码过程中#xff0c;排序是经常会遇到的需求#xff0c;本文会介绍三种常用的方法。
废话不多说#xff0c;下面正文开始。
使用标准库
根据场景直接使用标准库中的方法#xff0c;比如#xff1a;
sort.Intsso…原文链接 Go 语言中排序的 3 种方法
在写代码过程中排序是经常会遇到的需求本文会介绍三种常用的方法。
废话不多说下面正文开始。
使用标准库
根据场景直接使用标准库中的方法比如
sort.Intssort.Float64ssort.Strings
举个例子
s : []int{4, 2, 3, 1}
sort.Ints(s)
fmt.Println(s) // [1 2 3 4]自定义比较器
使用 sort.Slice 方法排序时可以自定义比较函数 less(i, j int) bool这样就可以根据需要按不同的字段进行排序。
如果想要稳定排序的话就使用 sort.SliceStable 方法。
举个例子
family : []struct {Name stringAge int
}{{Alice, 23},{David, 2},{Eve, 2},{Bob, 25},
}// Sort by age, keeping original order or equal elements.
sort.SliceStable(family, func(i, j int) bool {return family[i].Age family[j].Age
})
fmt.Println(family) // [{David 2} {Eve 2} {Alice 23} {Bob 25}]自定义数据结构
使用 sort.Sort 或者 sort.Stable 方法它们可以对任意实现了 sort.Interface 的数据结构排序。
type Interface interface {// Len is the number of elements in the collection.Len() int// Less reports whether the element with// index i should sort before the element with index j.Less(i, j int) bool// Swap swaps the elements with indexes i and j.Swap(i, j int)
}意思就是说只要某一个数据结构实现了 Len() intLess(i, j int) bool 和 Swap(i, j int) 这三个方法那么就可以使用 sort.Sort 来排序。
举个例子
type Person struct {Name stringAge int
}// ByAge implements sort.Interface based on the Age field.
type ByAge []Personfunc (a ByAge) Len() int { return len(a) }
func (a ByAge) Less(i, j int) bool { return a[i].Age a[j].Age }
func (a ByAge) Swap(i, j int) { a[i], a[j] a[j], a[i] }func main() {family : []Person{{Alice, 23},{Eve, 2},{Bob, 25},}sort.Sort(ByAge(family))fmt.Println(family) // [{Eve 2} {Alice 23} {Bob 25}]
}字典排序
我们都知道字典是无序的具体原因可以看之前写的这篇文章 Go 语言 map 如何顺序读取
如果想要字典按 key 或者 value 排序的话可以这样做。
m : map[string]int{Alice: 2, Cecil: 1, Bob: 3}keys : make([]string, 0, len(m))
for k : range m {keys append(keys, k)
}
sort.Strings(keys)for _, k : range keys {fmt.Println(k, m[k])
}
// Output:
// Alice 2
// Bob 3
// Cecil 1以上就是本文的全部内容如果觉得还不错的话欢迎点赞转发和关注感谢支持。 参考文章
https://yourbasic.org/golang/how-to-sort-in-go/#performance-and-implementation
推荐阅读
Go 语言 map 是并发安全的吗Go 语言切片是如何扩容的Go 语言数组和切片的区别Go 语言 new 和 make 关键字的区别为什么 Go 不支持 []T 转换为 []interface为什么 Go 语言 struct 要使用 tags