使用多個標準對結構進行排序
在 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中文網其他相關文章!