实现对Hero结构体切片的排序sort.Sort(data Interface)
sort.Sort(data Interface)
package main
import (
"fmt"
"math/rand"
"sort"
"time"
)
type Hero struct {
Name string
Age int
}
type HeroSlice []Hero //自定义Hero结构体切片
func (h HeroSlice) Len() int {
return len(h)
}
//Less方法就是决定你使用什么标准进行排序
func (h HeroSlice) Less(i, j int) bool {
return h[i].Age < h[j].Age
//return h[i].Name < h[j].Name
}
func (h HeroSlice) Swap(i, j int) {
h[i], h[j] = h[j], h[i]
}
func main() {
var Heroes HeroSlice //
Heroes = make(HeroSlice, 10)
rand.Seed(time.Now().UnixNano())
for i := 0; i < 10; i++ {
Heroes[i] = Hero{
Name: fmt.Sprintf("tom%v", rand.Intn(100)),
Age: rand.Intn(100),
}
}
//var Heroes HeroSlice
//for i := 0; i < 10; i++ {
// Hero := Hero{
// Name: fmt.Sprintf("tom%v", rand.Intn(100)),
// Age: rand.Intn(100),
// }
// Heroes = append(Heroes, Hero)
//}
//排序前
fmt.Println("==============排序前=============")
for _, value := range Heroes {
fmt.Println(value.Name, value.Age)
}
sort.Sort(Heroes)
//排序前
fmt.Println("==============排序后=============")
for _, value := range Heroes {
fmt.Println(value.Name, value.Age)
}
}
本作品采用《CC 协议》,转载必须注明作者和本文链接