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}]

次の例: パニック.