对数据结构进行排序是编程中的一项基本任务,Go 提供了多种方法来处理此问题。特别是,根据任意字段名称进行排序时,结构体数组会带来挑战。
考虑以下 Go 代码:
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"` } func main() { planets := [...]Planet{{"Mars", 249.2, 206.7, 227939100, 3389.5}, {"Venus", 108.939, 107.477, 108208000, 6051.8}, {"Earth", 151.930, 147.095, 149598261, 6371.0}} }
我们如何排序行星按轴场排列?
最近Go 版本中,sort.Slice 函数提供了一种基于自定义比较函数对切片进行排序的有效方法。
sort.Slice(planets[:], func(i, j int) bool { return planets[i].Axis < planets[j].Axis })
这里,i 和 j 是切片中元素的索引,比较函数返回如果索引 i 处的元素应该位于索引 j 处的元素之前,则为 true。在本例中,我们正在比较行星的轴场。
请注意,使用数组(而不是切片)时,需要使用切片覆盖运算符 [:] 将数组转换为切片。
通过利用 sort.Slice,我们实现了基于任意字段名称的结构体数组的简单高效的排序。这为 Go 中的复杂数据结构排序提供了类似 Python 的体验。
以上是如何通过自定义字段名称对 Go 结构体数组进行高效排序?的详细内容。更多信息请关注PHP中文网其他相关文章!