兩種方法,一種是實現(xiàn)一個接口里的三個方法,一種是匿名函數(shù)(推薦使用)
匿名函數(shù)實現(xiàn)切片排序
package main
import (
"fmt"
"sort"
)
type Person struct {
Age int
}
func main() {
//聲明切片對象
person := make([]*Person, 0)
//添加值
person = append(person, &Person{
Age: 10,
})
person = append(person, &Person{
Age: 2,
})
person = append(person, &Person{
Age: 15,
})
person = append(person, &Person{
Age: 29,
})
person = append(person, &Person{
Age: 9,
})
fmt.Println("未排序:")
for _, item := range person{
fmt.Printf("Age: %d\n", item.Age)
}
//進行降序 i大于j 為降序
sort.Slice(person, func(i, j int) bool {
return person[i].Age > person[j].Age
})
fmt.Println("排序后-降序:")
for _, item := range person{
fmt.Printf("Age: %d\n", item.Age)
}
//進行升序 i < j
sort.Slice(person, func(i, j int) bool {
return person[i].Age < person[j].Age
})
fmt.Println("排序后-升序:")
for _, item := range person{
fmt.Printf("Age: %d\n", item.Age)
}
}
結(jié)果
未排序:
Age: 10
Age: 2
Age: 15
Age: 29
Age: 9
排序后-降序:
Age: 29
Age: 15
Age: 10
Age: 9
Age: 2
排序后-升序:
Age: 2
Age: 9
Age: 10
Age: 15
Age: 29
實現(xiàn)一個接口里的三個方法
package main
import (
"fmt"
"sort"
)
type Man struct {
Age int
}
//定義切片類型
type Mans []Man
//實現(xiàn)排序len函數(shù)
func (m Mans) Len() int {
return len(m)
}
//進行升序 i大于j 為降序, i小于j 為升序
func (m Mans) Less(x, y int) bool {
return m[x].Age > m[y].Age
}
//swap 進行位置置換
func (m Mans) Swap(x, y int) {
m[x], m[y] = m[y], m[x]
}
func main() {
//聲明切片對象
person := Mans{
}
//添加值
person = append(person, Man{
Age: 10,
})
person = append(person,Man{
Age: 2,
})
person = append(person, Man{
Age: 15,
})
fmt.Println("未排序:")
for _, item := range person{
fmt.Printf("Age: %d\n", item.Age)
}
sort.Sort(person)
fmt.Println("IS Sorted:", sort.IsSorted(person))
fmt.Println("排序后-降序:")
for _, item := range person {
fmt.Printf("Age: %d\n", item.Age)
}
}
結(jié)果
未排序:
Age: 10
Age: 2
Age: 15
IS Sorted: true
排序后-降序:
Age: 15
Age: 10
Age: 2