Encadenamiento de 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; crea un nuevo array transformando cada elemento. Su verdadero poder se demuestra cuando lo encadenas con select, reject y otros similares.
Cada método devuelve un array, así que llamar a otro método sobre el resultado simplemente continúa:
numbers = [1, 2, 3, 4, 5]
result = numbers
.select { |n| n.odd? }
.map { |n| n * 10 }
puts result.inspect # [10, 30, 50]Lee la cadena de arriba abajo: empieza con números, conserva los impares y multiplica cada uno por 10. Sin variables temporales ni bucle.
El atajo &:method_name funciona siempre que el bloque simplemente llame a un método:
["hi", "yo"].map { |s| s.upcase } # ["HI", "YO"]
["hi", "yo"].map(&:upcase) # ["HI", "YO"] (igual)Esta forma abreviada aparece en todas partes en el código de 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 más largas, aplícales map con &:upcase y después usa join.
Para la entrada hi,hello,yo,coddy,sup, la salida es:
HELLO, CODDYPruébalo tú mismo
words = gets.chomp.split(",")
# TODO: encadena 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
1Cadenas en profundidad
Descripción general de los métodos de cadenasInterpolación de cadenasIteración sobre cadenasSeparar y unirRepaso: Tejedor de cadenas4Bloques, Procs y Lambdas
¿Qué es un bloque?do..end frente a llavesLa palabra clave yieldParámetros de bloqueProcs y LambdasRepaso: iterador personalizado7Hashes Parte 2
Hash.new con valores predeterminadosIteración de hashesHashes anidadosCombinación y transformaciónRepaso: contador de frecuencias10Proyecto - Registros de estudiantes
Descripción general del proyectoAgregar estudiante5Potencia Enumerable
Select y RejectEncadenamiento de MapReduce / Injectcount, all?, any?, none?group_by y partitionsort_by, min_by, max_byRepaso: canalización de datosPractica por tu cuenta: Compilador de Ruby online