map, filter y reduce genéricos en Go
Lo que la biblioteca estándar te deja a ti, en diez líneas.
func Map[T, U any](values []T, fn func(T) U) []U {
out := make([]U, len(values))
for i, value := range values {
out[i] = fn(value)
}
return out
}
func Filter[T any](values []T, keep func(T) bool) []T {
var out []T
for _, value := range values {
if keep(value) {
out = append(out, value)
}
}
return out
}
func Reduce[T, U any](values []T, start U, fn func(U, T) U) U {
total := start
for _, value := range values {
total = fn(total, value)
}
return total
}
Cómo funciona
- Dos parámetros de tipo dejan que Map cambie el tipo de elemento.
- El argumento función hace el trabajo; el helper hace el bucle.
- Go no encadena métodos, así que estos se componen anidando.
Palabras clave y builtins usados aquí
anyappendboolforfunciflenmakerangereturnvar
El intento, en números
- Líneas
- 25
- Caracteres a escribir
- 457
- Tokens
- 165
- Ritmo de tres estrellas
- 110 tpm
Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 90 segundos.
Paso 4 de 4 en Genéricos; paso 16 de 19 en Interfaces y genéricos.