首頁 > 後端開發 > Golang > 如何以多個標準對 Go 中的結構進行排序(姓氏然後名字)?

如何以多個標準對 Go 中的結構進行排序(姓氏然後名字)?

Linda Hamilton
發布: 2024-12-09 20:07:19
原創
213 人瀏覽過

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

使用多個標準對結構進行排序

在 Go 中,可以使用多種方法來實現結構體切片的排序。本討論重點在於按多個參數排序,特別是按 LastName 和 FirstName。

方法 1:slices.SortFunc (Go 1.22 )

對於 Go 1.22 及更高版本, slices.SortFunc提供了一個優雅的解決方案:

slices.SortFunc(members, func(a, b Member) int {
    return cmp.Or(
        cmp.Compare(a.LastName, b.LastName),
        cmp.Compare(a.FirstName, b.FirstName),
    )
})
登入後複製

方法二:sort.Slice 或sort.Sort

在Go 1.8 中,可以使用sort.Slice 或sort.Sort。兩者都需要較少的函數來確定順序。此函數比較LastName 和FirstName 字段:

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
})
登入後複製

對於sort.Sort,需要實現sort.Interface 的自定義類型:

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))
登入後複製

性能注意事項

選擇最適合您的應用程式要求的方法。除非效能分析顯示排序是瓶頸,否則應優先考慮便利性。

以上是如何以多個標準對 Go 中的結構進行排序(姓氏然後名字)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板