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

Goで構造体のスライスを複数のフィールドで並べ替えるにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-10-29 20:07:30
オリジナル
576 人が閲覧しました

How to Sort a Slice of Structs by Multiple Fields in Go?

複数のフィールドによるスライス オブジェクトの並べ替え

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

次の親構造体と子構造体を考えます:

type Parent struct {
    id       string
    children []Child
}

type Child struct {
    id string
}
ログイン後にコピー

事前に定義された値を持つ親構造体のスライスがあるとします:

parents := []Parent{
    {
        "3",
        []Child{
            {"2"},
            {"3"},
            {"1"},
        },
    },
    {
        "1",
        []Child{
            {"8"},
            {"9"},
            {"7"},
        },
    },
    {
        "2",
        []Child{
            {"5"},
            {"6"},
            {"4"},
        },
    },
}
ログイン後にコピー

ソート要件:

私たちの目標は、2 つの基準に基づいて親スライスをソートすることです。

  1. 親構造体を ID フィールドの昇順に並べ替えます。
  2. 各親構造体内で、子のスライスを ID フィールドの昇順に並べ替えます。

解決策:

この並べ替えを実現するには、sort.Slice 関数を利用します。この関数は、カスタム比較関数に基づいてスライスを並べ替える柔軟な方法を提供します。コードは次のとおりです:

<code class="go">// Sort parents by their ID
sort.Slice(parents, func(i, j int) bool { return parents[i].id < parents[j].id })

// Iterate over each parent and sort their children by ID
for _, parent := range parents {
    sort.Slice(parent.children, func(i, j int) bool { return parent.children[i].id < parent.children[j].id })
}</code>
ログイン後にコピー

この並べ替えアルゴリズムは両方の基準を効率的に処理し、親スライスが希望どおりに順序付けされるようにします。

期待される結果:

ソートされたスライスは次の構造のようになります:

[{1 [{7} {8} {9}]} {2 [{4} {5} {6}]} {3 [{1} {2} {3}]}]
ログイン後にコピー

以上がGoで構造体のスライスを複数のフィールドで並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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