如何對具有多個參數的結構進行排序
在程式設計中,經常需要根據多個條件對資料進行排序。在 Go 中,可以使用自訂排序函數有效地實現這一點。
問題:
如何依照姓氏和名字對結構體切片進行排序?
使用slices.SortFunc 的解決方案(Go 1.22 ):
slices.SortFunc(members, func(a, b Member) int { return cmp.Or( cmp.Compare(a.LastName, b.LastName), cmp.Compare(a.FirstName, b.FirstName), ) })
此解決方案使用slices.SortFunc 函數按LastName 和FirstName 欄位按順序比較。
使用 sort.Slice 或sort.Sort:
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 })
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))
兩種解都先比較 LastName 欄位。如果它們相等,則比較 FirstName 欄位。結果是按兩個欄位排序的成員切片。
以上是如何在 Go 中按多個欄位對結構進行排序(姓氏然後名字)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!