首頁 > 後端開發 > Golang > Go 中如何以多個參數對結構體進行排序?

Go 中如何以多個參數對結構體進行排序?

Mary-Kate Olsen
發布: 2024-12-16 12:20:11
原創
322 人瀏覽過

How to Sort Structs by Multiple Parameters in Go?

使用多個參數對結構體進行排序

問題:

結構用🎜>問題:

結構體數組如何排序以多個參數排序,特別是按姓氏,然後是名字Go?

答案:

Go 中有多種對具有多個參數的結構體進行排序的方法。

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

Go 的最新版本(1.22 及更高版本)提供了使用slices.SortFunc 的簡潔解決方案:

sort.Slice或 sort.Sort 函數

對於早期版本的 Go,請考慮使用 sort.Slice 或 sort.Sort。兩者都需要一個自訂的 less 函數來根據所需參數決定排序。

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.Slice:

使用sort.Sort:

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

建立一個實作sort.Interface的自訂類型,定義Len,交換和Less 方法。

效能注意事項:

雖然這些方法提供了不同的結構排序方法,但效能分析對於最佳化熱點至關重要。選擇最適合您的應用程式要求的方法。

以上是Go 中如何以多個參數對結構體進行排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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