首頁 > 後端開發 > Golang > 如何在 Go 中按多個欄位對結構體切片進行排序?

如何在 Go 中按多個欄位對結構體切片進行排序?

Mary-Kate Olsen
發布: 2024-10-29 20:07:30
原創
541 人瀏覽過

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

以多個欄位對切片物件進行排序

按多個條件排序

考慮以下父級和子級結構:

type Parent struct {
    id       string
    children []Child
}

type Child struct {
    id string
}
登入後複製

假設我們有一個預定義值的Parent 結構體切片:

parents := []Parent{
    {
        "3",
        []Child{
            {"2"},
            {"3"},
            {"1"},
        },
    },
    {
        "1",
        []Child{
            {"8"},
            {"9"},
            {"7"},
        },
    },
    {
        "2",
        []Child{
            {"5"},
            {"6"},
            {"4"},
        },
    },
}
登入後複製

排序要求:

我們的目標是根據兩個標準將parents切片排序:

  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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板