按切片欄位排序
在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>
目標是根據兩個條件對父切片進行排序:
解:
要實現想要的排序,可以使用 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中文網其他相關文章!