使用多個參數對結構體進行排序
問題:
結構用🎜>問題:
結構體數組如何排序以多個參數排序,特別是按姓氏,然後是名字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.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中文網其他相關文章!