ホームページ > バックエンド開発 > Golang > Goで複数のパラメータによって構造体を並べ替えるにはどうすればよいですか?

Goで複数のパラメータによって構造体を並べ替えるにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-16 12:20:11
オリジナル
319 人が閲覧しました

How to Sort Structs by Multiple Parameters in Go?

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

質問:

構造体の配列はどのように構成できますか?複数のパラメータ、具体的には姓、名の順に並べ替えます。 Go?

答え:

Go で複数のパラメーターを持つ構造体を並べ替える方法はいくつかあります。

スライスを使用した Go 1.22。SortFunc

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 Functions

を使用した簡潔な解決策を提供します。以前のバージョンの Go では、sort の使用を検討してください。スライスまたはソート。ソート。どちらも、必要なパラメーターに基づいて順序を決定するカスタム Less 関数が必要です。

sort.Slice を使用:

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 インターフェイスを実装するカスタム タイプを作成し、Len を定義します。 Swap メソッドと Less メソッド。

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 までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート