go数组对象排序

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容