Go で複数の条件に基づいて、ネストされたスライスを含む構造体のスライスを並べ替えるにはどうすればよいでしょうか?

DDD
リリース: 2024-10-28 21:10:03
オリジナル
946 人が閲覧しました

How do you sort a slice of structs with nested slices in Go based on multiple criteria?

入れ子になったスライスを使用した構造体のスライスの並べ替え

Go では、組み込みの並べ替えパッケージを使用してカスタム構造体のスライスを並べ替えることができます。親子関係を表す 2 つの構造体、Parent と Child を定義する次のコードを考えてみましょう。

<code class="go">type Parent struct {
    id       string
    children []Child
}

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

Parent 構造体のスライスがあり、それらを 2 つの基準に基づいて並べ替えるとします。

並べ替え基準:

  1. 親スライスを Parent.id で昇順に並べ替えます。
  2. 各親について、子スライスを子で並べ替えます。親内の昇順の ID。

解決策:

提供されたコード スニペットは並べ替え要件に対応しています:

``
// 親スライス内の各親を Id
sort.Slice(parents, func(i, j int) bool {

return parents[i].id < parents[j].id })
ログイン後にコピー

// 親ごとに、各子を子は Id
for _ でスライス、親 := range 親 {

sort.Slice(parent.children, func(i, j int) bool { 
    return parent.children[i].id < parent.children[j].id })
ログイン後にコピー

}
``

sort.Slice 関数はスライスに対して直接動作するため、必要がありません。中間コンテナの場合。

  1. Parent.id に基づいて親スライスを並べ替えます。
  2. 並べ替えられた親スライス内の各親について、次を使用して Child.id に基づいて子スライスを並べ替えます。ネストされたループ。

結果は期待される出力と一致します:

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

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!