Golang官方包中包含一个sort,提供了几种排序算法。
比如sort.Ints、Float64、Strings,分别是对整数,浮点数,字符串的排序。
//数字排序
ages := []int{2,1,5,66,55,23,78,98,13}
sort.Ints(ages)
for _, value := range ages {
fmt.Println(value)
}
//字符串排序
names := []string{"Hello", "World", "private", "folders", "Users", "workspace"}
sort.Strings(names)
for _, value := range names {
fmt.Println(value)
}
除了上面几种基础的数值排序之外,golang还包含了针对复杂对象的排序。
type SortSample struct {
}
func (this *SortSample) Sort() {
var planets = []Person{
{"Jim", 11},
{"Jack", 23},
{"Meimei", 43},
{"Justin", 32},
}
//依据名称对人群排序
name := func(p1, p2 *Person) bool {
return p1.name < p2.name
}
//依据年龄对人群排序
age := func(p1, p2 *Person) bool {
return p1.age < p2.age
}
By(name).Sort(planets)
fmt.Println("By name:", planets)
By(age).Sort(planets)
fmt.Println("By mass:", planets)
}
type earthMass float64
type au float64
type Person struct {
name string
age int
}
type By func(p1, p2 *Person) bool
func (by By) Sort(planets []Person) {
ps := &PersonSorter{
persons: planets,
by: by,
}
sort.Sort(ps)
}
type PersonSorter struct {
persons []Person
by func(p1, p2 *Person) bool
}
func (s *PersonSorter) Len() int {
return len(s.persons)
}
func (s *PersonSorter) Swap(i, j int) {
s.persons[i], s.persons[j] = s.persons[j], s.persons[i]
}
func (s *PersonSorter) Less(i, j int) bool {
return s.by(&s.persons[i], &s.persons[j])
}
如果要对复杂对象排序的话,该排序必须包含Len,Swap,Less这三个方法。
