次の親構造体と子構造体を考えます:
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 つの基準に基づいて親スライスをソートすることです。
解決策:
この並べ替えを実現するには、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 サイトの他の関連記事を参照してください。