Home > Backend Development > Golang > How to Sort Structs in Go by Multiple Parameters (LastName then FirstName)?

How to Sort Structs in Go by Multiple Parameters (LastName then FirstName)?

Susan Sarandon
Release: 2024-12-16 17:34:14
Original
564 people have browsed it

How to Sort Structs in Go by Multiple Parameters (LastName then FirstName)?

Sorting Structs with Multiple Sort Parameters

When working with arrays or slices of structs, sorting them by multiple parameters can be a common requirement. This guide explores different approaches to sorting structs based on multiple parameters, focusing on the specific need of sorting by both LastName and FirstName.

Using slices.SortFunc for Concise Sorting

In Go 1.22 and later, the slices.SortFunc function offers a concise and readable solution for sorting slices. It takes a custom comparison function as an argument, allowing you to define the sort criteria. For sorting by LastName and then FirstName, you can use the cmp.Or and cmp.Compare functions:

slices.SortFunc(members, func(a, b Member) int {
    return cmp.Or(
        cmp.Compare(a.LastName, b.LastName),
        cmp.Compare(a.FirstName, b.FirstName),
    )
})
Copy after login

Leveraging sort.Slice for Simpler Sorting

The sort.Slice function provides a straightforward way to sort slices. It takes a slice and a comparison function as arguments. The comparison function should return true if its first argument is less than its second argument, and false otherwise. To sort by LastName and then FirstName, you can create the following comparison function:

sort.Slice(members, func(i, j int) bool {
    if members[i].LastName != members[j].LastName {
        return members[i].LastName < members[j].LastName
    }
    return members[i].FirstName < members[j].FirstName
})
Copy after login

Utilizing sort.Sort for More Flexibility

Another approach is to use the sort.Sort function, which takes a value that implements the sort.Interface interface. This interface requires three methods: Len(), Swap(), and Less(). The Less() method is the same as the comparison function used in the previous approaches.

type byLastFirst []Member

func (members byLastFirst) Len() int           { return len(members) }
func (members byLastFirst) Swap(i, j int)      { members[i], members[j] = members[j], members[i] }
func (members byLastFirst) Less(i, j int) bool {
    if members[i].LastName != members[j].LastName {
        return members[i].LastName < members[j].LastName
    }
    return members[i].FirstName < members[j].FirstName
}

sort.Sort(byLastFirst(members))
Copy after login

Choosing the Right Approach

Which approach is best depends on your specific application and performance requirements. Unless performance is a critical factor, choosing the most convenient approach based on readability and maintenance is recommended.

The above is the detailed content of How to Sort Structs in Go by Multiple Parameters (LastName then FirstName)?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template