go数组对象排序
对象数组排序
service
package service
import (
"fmt"
"sort"
)
type Person struct {
Name string `json:"name"`
Sex string `json:"sex"`
Age int `json:"age"`
}
type PersonSort []Person
//PersonSort 实现sort SDK 中的Interface接口
func (s PersonSort) Len() int {
//返回传入数据的总数
return len(s)
}
func (s PersonSort) Swap(i, j int) {
//两个对象满足Less()则位置对换
//表示执行交换数组中下标为i的数据和下标为j的数据
s[i], s[j] = s[j], s[i]
}
func (s PersonSort) Less(i, j int) bool {
//按字段比较大小,此处是降序排序
//返回数组中下标为i的数据是否小于下标为j的数据
return s[i].Age > s[j].Age
}
func SortSlice() {
var mD []Person
m16 := Person{
Name: "xj16",
Sex: "男16",
Age: 16,
}
mD = append(mD, m16)
m55 := Person{
Name: "xj55",
Sex: "男55",
Age: 55,
}
mD = append(mD, m55)
m18 := Person{
Name: "xj18",
Sex: "男18",
Age: 18,
}
mD = append(mD, m18)
m25 := Person{
Name: "xj25",
Sex: "男25",
Age: 25,
}
m15 := Person{Name: "xj15",
Sex: "男15",
Age: 15,
}
mD = append(mD, m15)
mD = append(mD, m25)
fmt.Printf("排序前:%+v\n", mD)
sort.Sort(PersonSort(mD))
fmt.Printf("排序后:%+v\n", mD)
}
排序前:[{Name:xj16 Sex:男16 Age:16} {Name:xj55 Sex:男55 Age:55} {Name:xj18 Sex:男18 Age:18} {Name:xj15 Sex:男15 Age:15} {Name:xj25 Sex:男25 Age:25}]
排序后:[{Name:xj55 Sex:男55 Age:55} {Name:xj25 Sex:男25 Age:25} {Name:xj18 Sex:男18 Age:18} {Name:xj16 Sex:男16 Age:16} {Name:xj15 Sex:男15 Age:15}]