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

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-09 20:07:19264ブラウズ

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。