sort.Interface y slices.SortFunc en Go
La vieja vía de tres métodos, y la genérica que la reemplazó.
type Step struct {
Title string
Stars int
}
type byStars []Step
func (s byStars) Len() int { return len(s) }
func (s byStars) Less(i, j int) bool { return s[i].Stars < s[j].Stars }
func (s byStars) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
func sortBothWays(steps []Step) []string {
sort.Sort(byStars(steps))
oldest := steps[0].Title
slices.SortFunc(steps, func(a, b Step) int {
return cmp.Or(cmp.Compare(b.Stars, a.Stars),
cmp.Compare(a.Title, b.Title))
})
return []string{oldest, steps[0].Title}
}
Cómo funciona
sort.Interfaceexige Len, Less y Swap.slices.SortFunctoma una comparación y nada de boilerplate.cmp.Compareescribe la comparación para tipos ordenados.
Palabras clave y builtins usados aquí
boolfuncintlenreturnstringstructtype
El intento, en números
- Líneas
- 21
- Caracteres a escribir
- 519
- Tokens
- 184
- Ritmo de tres estrellas
- 105 tpm
Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 105 segundos.
Paso 3 de 3 en Interfaces estándar; paso 12 de 19 en Interfaces y genéricos.