Go 範例:使用函數排序

有時候,我們會希望依照其他方式而不是其自然順序來排序集合。例如,假設我們想要依照字串的長度而非字母順序來排序字串。以下是 Go 中自訂排序的範例。

package main
import (
    "cmp"
    "fmt"
    "slices"
)
func main() {
    fruits := []string{"peach", "banana", "kiwi"}

我們為字串長度實作一個比較函數。cmp.Compare 對此很有幫助。

    lenCmp := func(a, b string) int {
        return cmp.Compare(len(a), len(b))
    }

現在,我們可以使用這個自訂比較函數呼叫 slices.SortFunc 以依照名稱長度來排序 fruits

    slices.SortFunc(fruits, lenCmp)
    fmt.Println(fruits)

我們可以使用相同的技巧來排序一片不是內建類型的值。

    type Person struct {
        name string
        age  int
    }
    people := []Person{
        Person{name: "Jax", age: 37},
        Person{name: "TJ", age: 25},
        Person{name: "Alex", age: 72},
    }

使用 slices.SortFunc 依照年齡來排序 people

注意:如果 Person 結構很大,您可能希望切片包含 *Person,並相應調整排序函數。如果有疑問,基準測試

    slices.SortFunc(people,
        func(a, b Person) int {
            return cmp.Compare(a.age, b.age)
        })
    fmt.Println(people)
}
$ go run sorting-by-functions.go 
[kiwi peach banana]
[{TJ 25} {Jax 37} {Alex 72}]

下一個範例:恐慌