複数の基準による構造体の並べ替え
Go では、さまざまなアプローチを使用して構造体のスライスを並べ替えることができます。この説明では、複数のパラメータによる並べ替え、特に LastName と FirstName による並べ替えに焦点を当てます。
方法 1:slices.SortFunc (Go 1.22 )
Go 1.22 以降の場合、スライス.SortFunc はエレガントな機能を提供します解決策:
slices.SortFunc(members, func(a, b Member) int { return cmp.Or( cmp.Compare(a.LastName, b.LastName), cmp.Compare(a.FirstName, b.FirstName), ) })
方法 2: 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 中国語 Web サイトの他の関連記事を参照してください。