首頁 >後端開發 >Golang >如何在 Go 中按多個欄位對結構進行排序(姓氏然後名字)?

如何在 Go 中按多個欄位對結構進行排序(姓氏然後名字)?

Patricia Arquette
Patricia Arquette原創
2024-12-12 17:36:12198瀏覽

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

如何對具有多個參數的結構進行排序

在程式設計中,經常需要根據多個條件對資料進行排序。在 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn