在 Go 中按自定义字段名称对结构体数组进行排序
在 Go 中,按特定字段对结构体数组进行排序可能会很复杂任务,特别是当您需要自定义密钥时。然而,随着 Go 1.8 中引入 sort.Slice,这个过程变得更加容易。
考虑一组 Planet 结构,每个结构都包含名称、远日点、近日点、轴和半径等属性。要按轴值对这些行星进行排序,您可以使用 sort.Slice 函数:
package main import ( "log" "sort" ) type Planet struct { Name string Aphelion float64 Perihelion float64 Axis int64 Radius float64 } func main() { mars := &Planet{ Name: "Mars", Aphelion: 249.2, Perihelion: 206.7, Axis: 227939100, Radius: 3389.5, } earth := &Planet{ Name: "Earth", Aphelion: 151.930, Perihelion: 147.095, Axis: 149598261, Radius: 6371.0, } venus := &Planet{ Name: "Venus", Aphelion: 108.939, Perihelion: 107.477, Axis: 108208000, Radius: 6051.8, } planets := [...]Planet{*mars, *venus, *earth} log.Println("Original order:", planets) sort.Slice(planets[:], func(i, j int) bool { return planets[i].Axis < planets[j].Axis }) log.Println("Order after sorting by axis:", planets) }
在此示例中,sort.Slice 函数采用行星数组的切片和比较函数作为其参数。比较函数确定排序顺序。在这种情况下,比较函数检查第 i 个元素的轴值是否小于第 j 个元素的轴值。
排序操作就地修改了planets 数组,因此不需要将排序后的结果分配给新变量。
需要注意的是,sort.Slice 会修改原始数组。如果您需要新的排序切片,可以在排序之前显式创建原始切片的副本。
以上是如何使用'sort.Slice”按自定义字段对 Go 结构体进行排序?的详细内容。更多信息请关注PHP中文网其他相关文章!