How to sort struct with multiple sort parameters?

前端 未结 8 580
囚心锁ツ
囚心锁ツ 2020-12-24 11:24

I have an array/slice of members:

type Member struct {
    Id int
    LastName string
    FirstName string
}

var members []Member

My quest

8条回答
  •  时光取名叫无心
    2020-12-24 12:05

    Here is a slightly more concise implementation of the accepted answer:

    package main
    
    import (
        "fmt"
        "sort"
    )
    
    type Member struct {
        FirstName string
        LastName  string
    }
    
    func main() {
        members := []Member{
            {"John", "Doe"},
            {"Jane", "Doe"},
            {"Mary", "Contrary"},
        }
    
        fmt.Println(members)
    
        sort.Slice(members, func(i, j int) bool {
            return members[i].LastName < members[j].LastName || members[i].FirstName < members[j].FirstName
        })
    
        fmt.Println(members)
    }
    

    Running will print the following output:

    [{John Doe} {Jane Doe} {Mary Contrary}]
    [{Mary Contrary} {Jane Doe} {John Doe}]
    

    This is as expected: the members are printed in order of ascending last name, where in the case of a tie, they are printed in order of first name.

提交回复
热议问题