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

Goで複数のフィールド(姓、名)ごとに構造体を並べ替える方法は?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-12 17:36:12198ブラウズ

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

複数のパラメータを持つ構造体を並べ替える方法

プログラミングでは、多くの場合、複数の基準に基づいてデータを並べ替える必要があります。 Go では、これはカスタム並べ替え関数を使用して効果的に実現できます。

問題:
構造体のスライスを LastName、FirstName で並べ替えるにはどうすればよいですか?

slices.SortFunc を使用したソリューション (Go 1.22 ):

slices.SortFunc(members, func(a, b Member) int {
    return cmp.Or(
        cmp.Compare(a.LastName, b.LastName),
        cmp.Compare(a.FirstName, b.FirstName),
    )
})

このソリューションは、slices.SortFunc 関数を使用して、LastName フィールドと FirstName フィールドでその順序で構造体を比較します。

sort.Slice を使用したソリューション またはsort.Sort:

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
})
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))

両方ソリューションでは、最初に LastName フィールドが比較されます。それらが等しい場合は、FirstName フィールドを比較します。結果は、両方のフィールドでソートされたメンバーのスライスです。

以上がGoで複数のフィールド(姓、名)ごとに構造体を並べ替える方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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