首頁  >  文章  >  後端開發  >  如何在 Go 中對具有嵌套切片欄位的結構切片進行排序?

如何在 Go 中對具有嵌套切片欄位的結構切片進行排序?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-27 06:18:29432瀏覽

How to Sort a Slice of Structs with Nested Slice Fields in Go?

按切片欄位排序

在Go 中,您可能會遇到需要對包含進一步切片欄位的結構體切片進行嵌套排序的情況。考慮下面的範例:

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

type Child struct {
    id string
}</code>

假設您有一個具有以下值的Parent 結構切片:

<code class="go">parents := make([]Parent, 0)

p1 := Parent {
    "3",
    []Child {
        {"2"},
        {"3"},
        {"1"},
    },
}

p2 := Parent {
    "1",
    []Child {
        {"8"},
        {"9"},
        {"7"},
    },
}

p3 := Parent {
    "2",
    []Child {
        {"5"},
        {"6"},
        {"4"},
    },
}             

parents = append(parents, p1, p2, p3)</code>

目標是根據兩個條件對父切片進行排序:

  1. 首先,依Parent.id 排序。
  2. 在每個父級中,按 Child.id 排序子切片。

解:

要實現想要的排序,可以使用 sort.Slice 函數對父切片和巢狀子切片進行排序。程式碼如下:

<code class="go">// sort each Parent in the parents slice by Id
sort.Slice(parents, func(i, j int) bool {return parents[i].id < parents[j].id})

// for each Parent, sort each Child in the children slice 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>

此程式碼首先對父切片進行排序,確保父切片根據其 id 欄位按升序排列。隨後,對於每個父切片,它以相同的方式對子切片進行排序。

預期結果:

<code class="go">[{1 [{7} {8} {9}]} {2 [{4} {5} {6}]} {3 [{1} {2} {3}]}]</code>

以上是如何在 Go 中對具有嵌套切片欄位的結構切片進行排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn