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.
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), ) })
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 })
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))
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!