//结构体单字段排序
type Info struct {
Count float64 `json:"count"`
Age float64 `json:"age"`
}
type Infos []Info
func (a Infos) Len() int {
return len(a)
}
func (a Infos) Swap(i, j int) {
a[i], a[j] = a[j], a[i]
}
func (a Infos) Less(i, j int) bool {
return a[j].Count < a[i].Count
}
func main() {
var infos1 []Info
infos1 = append(infos1,Info{Count: 1,Age: 2})
infos1 = append(infos1,Info{Count: 2,Age: 2})
infos1 = append(infos1,Info{Count: 6,Age: 3})
infos1 = append(infos1,Info{Count: 8,Age: 4})
Print(infos1)
fmt.Println("排序后")
sort.Sort(Infos(infos1))
Print(infos1)
}
func Print(infos1 []Info) {
for k,v :=range infos1{
fmt.Println(k,",",v)
}
}
结构体多字段排序
type Info struct {
Count float64 `json:"count"`
Age float64 `json:"age"`
}
type Dates struct {
Infos []*Info
by func(p, q * Info) bool
}
func (pw Dates) Len() int {
return len(pw.Infos)
}
func (pw Dates) Swap(i, j int){
pw.Infos[i], pw.Infos[j] = pw.Infos[j], pw.Infos[i]
}
func (pw Dates) Less(i, j int) bool {
return pw.by(pw.Infos[i], pw.Infos[j])
}
func main() {
var infos1 []*Info
Info1 := &Info{Count: 1,Age: 2}
Info2 := &Info{Count: 2,Age: 2}
Info3 := &Info{Count: 0,Age: 4}
Info4 := &Info{Count: 0,Age: 5}
infos1 = append(infos1,Info1)
infos1 = append(infos1,Info2)
infos1 = append(infos1,Info3)
infos1 = append(infos1,Info4)
Print(infos1)
sort.Sort(Dates{infos1, func (p, q *Info) bool {
if p.Count != q.Count{
return p.Count > q.Count
}
return p.Age > q.Age
}})
fmt.Println("排序后")
Print(infos1)
}
func Print(infos1 []*Info) {
for k,v :=range infos1{
fmt.Println(k,",",v)
}
}