Map y Collect
Parte de la sección Fundamentos del Journey de Ruby de Coddy — lección 68 de 88.
Mientras que each es ideal para realizar acciones sobre elementos, a veces querrás transformar un array en uno nuevo. El método map (también llamado collect) hace exactamente esto: crea un nuevo array que contiene los resultados de ejecutar tu bloque en cada elemento.
numbers = [1, 2, 3, 4]
doubled = numbers.map { |n| n * 2 }
puts doubled # Salida: 2, 4, 6, 8La diferencia clave con respecto a each es que map devuelve un nuevo array con los valores transformados. El array original permanece sin cambios.
Aquí tienes un ejemplo práctico que convierte temperaturas de Celsius a Fahrenheit:
celsius = [0, 20, 100]
fahrenheit = celsius.map { |c| c * 9 / 5 + 32 }
puts fahrenheit # Salidas: 32, 68, 212También puedes usar map con cadenas:
names = ["alice", "bob"]
capitalized = names.map { |name| name.capitalize }
puts capitalized # Salida: Alice, BobLos métodos map y collect son idénticos. Ruby proporciona ambos nombres, por lo que puedes usar el que mejor se lea en tu código. La mayoría de los desarrolladores de Ruby prefieren map porque es más corto.
Desafío
FácilLee una sola línea de entrada que contenga números enteros separados por comas (por ejemplo, 2,4,6,8,10).
Divide la entrada en un arreglo de enteros, luego usa el método map para crear un nuevo arreglo donde cada número sea elevado al cuadrado (multiplicado por sí mismo).
Imprime cada elemento del nuevo arreglo de cuadrados en su propia línea.
Por ejemplo, si la entrada es 2,4,6,8,10, la salida debería ser:
4
16
36
64
100Si la entrada es 1,2,3,4,5, la salida debería ser:
1
4
9
16
25Si la entrada es 3,7,11, la salida debería ser:
9
49
121Si la entrada es 10, la salida debería ser:
100Hoja de referencia
El método map (también llamado collect) transforma un array en uno nuevo aplicando un bloque a cada elemento. Devuelve un nuevo array con los valores transformados, dejando el array original sin cambios.
numbers = [1, 2, 3, 4]
doubled = numbers.map { |n| n * 2 }
puts doubled # Salida: 2, 4, 6, 8Ejemplo con conversión de temperatura:
celsius = [0, 20, 100]
fahrenheit = celsius.map { |c| c * 9 / 5 + 32 }
puts fahrenheit # Salida: 32, 68, 212Ejemplo con cadenas de texto:
names = ["alice", "bob"]
capitalized = names.map { |name| name.capitalize }
puts capitalized # Salida: Alice, Bobmap y collect son métodos idénticos. La mayoría de los desarrolladores de Ruby prefieren map.
Pruébalo tú mismo
# Leer la entrada separada por comas
input = gets.chomp
# TODO: Escribe tu código a continuación
# 1. Divide la cadena de entrada en un arreglo de enteros
# 2. Usa el método map para elevar al cuadrado cada número
# 3. Imprime cada número al cuadrado en su propia líneaEsta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
4Operadores Parte 2
Operadores lógicos Parte 1Operadores lógicos Parte 2Repaso - Lógica simpleOperadores lógicos Parte 3Operadores lógicos Parte 47Calculadora para dividir la cuenta
Mensaje de bienvenidaObtener la entrada del usuario10FizzBuzz con un giro
Descripción general del juegoEl método FizzBuzz2Variables y tipos de datos
Números y variablesTipo de dato StringTipo de dato BooleanTipo de dato SymbolComprobación de tipos de datosConvenciones de nomenclaturaResumen: Creación de variables5Toma de decisiones
Sentencia IfIf - ElseRepaso - Calculadora simpleIf - Else anidadosSentencia Unless8Bucles
Bucle For con rangosBucle WhileBreakNextRepaso - FactorialBucle TimesBucle UntilBucles anidadosRepaso - Entrada dinámica3Operadores Parte 1
Operadores aritméticosOperador móduloAtajos aritméticosResumen - Matemáticas simplesOperadores de comparación6Entrada y Salida Básica
Salida con putsSalida con print y pSalida con variablesEntrada con getsMétodo chompConversión de tiposResumen - Calculadora de edadResumen - Verdadero o falso