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}]