Encadenando Map
Parte de la sección Lógica y flujo del Journey de Ruby de Coddy — lección 22 de 56.
Conociste map en los fundamentos, construye un nuevo array transformando cada elemento. Su verdadero potencial aparece cuando lo encadenas con select, reject y compañía.
Cada método devuelve un array, por lo que llamar a otro método sobre el resultado simplemente continúa la cadena:
numbers = [1, 2, 3, 4, 5]
result = numbers
.select { |n| n.odd? }
.map { |n| n * 10 }
puts result.inspect # [10, 30, 50]Lea la cadena de arriba a abajo: comience con números, mantenga los impares, multiplique cada uno por 10. Sin variables temporales, sin bucles.
El atajo &:method_name funciona siempre que el bloque solo llame a un método:
["hi", "yo"].map { |s| s.upcase } # ["HI", "YO"]
["hi", "yo"].map(&:upcase) # ["HI", "YO"] (lo mismo)Esta abreviatura está en todas partes en el código Ruby. Reconócela cuando la veas.
Desafío
FácilLee una lista de palabras separadas por comas. Imprime en una sola línea las palabras de más de 3 caracteres, en mayúsculas, unidas con , .
Constrúyelo como una sola cadena: select las largas, map con &:upcase, luego join.
Para la entrada hi,hello,yo,coddy,sup, la salida es:
HELLO, CODDYHoja de referencia
Encadena métodos de array — cada uno devuelve un nuevo array, por lo que puedes seguir llamando a métodos sobre el resultado:
numbers = [1, 2, 3, 4, 5]
result = numbers
.select { |n| n.odd? }
.map { |n| n * 10 }
# [10, 30, 50]Usa &:method_name como un atajo cuando un bloque solo llama a un método:
["hi", "yo"].map(&:upcase) # ["HI", "YO"]Pruébalo tú mismo
words = gets.chomp.split(",")
# POR HACER: encadenar select + map(&:upcase) + join
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y flujo
1Strings en profundidad
Visión general de los métodos de StringInterpolación de StringsIterar sobre StringsSplit y JoinRepaso - String Weaver4Bloques, Procs y Lambdas
¿Qué es un bloque?do..end vs llavesLa palabra clave yieldParámetros de bloqueProcs y LambdasResumen - Iterador personalizado7Hashes Parte 2
Hash.new con valores por defectoIteración de HashesHashes anidadosFusión y transformaciónResumen - Contador de frecuencia10Proyecto - Registros de Estudiantes
Descripción general del proyectoAgregar estudiante5Potencia de Enumerable
Select y RejectEncadenando MapReduce / Injectcount, all?, any?, none?group_by y partitionsort_by, min_by, max_byResumen - Data Pipeline