|
Někdy budeme chtít třídit kolekci podle něčeho jiného než je její přirozené řazení. Například, předpokládejme že jsme chtěli setřídit řetězce podle jejich délky a ne abecedně. Zde je příklad volitelných třídění v Go. |
|
![]()
package main
|
|
import (
"cmp"
"fmt"
"slices"
)
|
|
func main() {
fruits := []string{"peach", "banana", "kiwi"}
|
|
|
Naimplementujeme porovnávací funkci pro délky
řetězců. Hodí se nám k tomu |
lenCmp := func(a, b string) int {
return cmp.Compare(len(a), len(b))
}
|
|
Teď můžeme zavolat |
slices.SortFunc(fruits, lenCmp)
fmt.Println(fruits)
|
|
Stejnou techniku můžeme použít i pro třídění výřezu hodnot, které nejsou zabudovanými typy. |
type Osoba struct {
jmeno string
vek int
}
|
lide := []Osoba{
Osoba{jmeno: "Jax", vek: 37},
Osoba{jmeno: "TJ", vek: 25},
Osoba{jmeno: "Alex", vek: 72},
}
|
|
|
Setřídíme |
//
|
|
Pozn.: pokud je struktura |
slices.SortFunc(lide,
func(a, b Osoba) int {
return cmp.Compare(a.vek, b.vek)
})
fmt.Println(lide)
}
|
$ go run sorting-by-functions.go
[kiwi peach banana]
[{TJ 25} {Jax 37} {Alex 72}]
|
Další příklad: Panika (panic).