首頁 > 後端開發 > Golang > 如何透過自訂欄位對 Go Struct 陣列進行高效排序?

如何透過自訂欄位對 Go Struct 陣列進行高效排序?

Mary-Kate Olsen
發布: 2024-12-22 15:26:15
原創
602 人瀏覽過

How Can I Efficiently Sort a Go Struct Array by a Custom Field?

使用自訂字段比較器在Go 中進行優雅的數組排序

按特定字段對結構體數組進行排序可能是GoGo程式設計中的常見任務。讓我們探索一種高效且可自訂的方法來實現這一目標。

問題:

給定如下所示的結構數組:

type Planet struct {
    Name       string  `json:"name"`
    Aphelion   float64 `json:"aphelion"`   // in million km
    Perihelion float64 `json:"perihelion"` // in million km
    Axis       int64   `json:"Axis"`       // in km
    Radius     float64 `json:"radius"`
}
登入後複製

我們如何透過 Axis 欄位對這個陣列進行排序?

解:

從 Go 1.8 開始,sort.Slice 函數提供了一種使用自訂比較函數對切片進行排序的便捷方法。要按軸對行星數組進行排序,我們可以使用以下代碼:

import "sort"

// Define a comparison function to compare planets by their Axis value.
var sortByAxis = func(i, j int) bool {
    return planets[i].Axis < planets[j].Axis
}

// Create a slice over the array and sort it using the custom comparison function.
sort.Slice(planets[:], sortByAxis)
登入後複製

使用數組與切片:

通常,建議使用切片在Go 中優於數組,因為切片更加靈活和有效率。然而,在本例中,planets 變數被宣告為數組。為了使其與 sort.Slice 一起使用,我們需要使用planets[:]將其與切片疊加。

排序與維護陣列結構:

這很重要請注意,排序運算會就地修改陣列。如果您希望保持原始數組結構,可以在排序之前建立切片的副本:

planetSlice := make([]Planet, len(planets))
copy(planetSlice, planets)
sort.Slice(planetSlice, sortByAxis)
登入後複製

這允許您在不影響原始數組的情況下使用排序後的切片。

以上是如何透過自訂欄位對 Go Struct 陣列進行高效排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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