typestar

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

  1. sort.Interface exige Len, Less y Swap.
  2. slices.SortFunc toma una comparación y nada de boilerplate.
  3. cmp.Compare escribe la comparación para tipos ordenados.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 3 de 3 en Interfaces estándar; paso 12 de 19 en Interfaces y genéricos.

← Anterior Siguiente →