首頁 > 後端開發 > Golang > 如何使用「sort.Slice」按自訂欄位對 Go 結構體進行排序?

如何使用「sort.Slice」按自訂欄位對 Go 結構體進行排序?

DDD
發布: 2024-12-19 06:25:10
原創
444 人瀏覽過

How to Sort Go Structs by Custom Fields Using `sort.Slice`?

在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中文網其他相關文章!

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