ホームページ > バックエンド開発 > Golang > Goで構造体を複数の基準(姓、名)で並べ替える方法は?

Goで構造体を複数の基準(姓、名)で並べ替える方法は?

Linda Hamilton
リリース: 2024-12-09 20:07:19
オリジナル
227 人が閲覧しました

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

複数の基準による構造体の並べ替え

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート