Map e Collect
Parte da seção Fundamentos do Journey de Ruby da Coddy — lição 68 de 88.
Embora o each seja ótimo para realizar ações em elementos, às vezes você deseja transformar um array em um novo. O método map (também chamado de collect) faz exatamente isso: ele cria um novo array contendo os resultados da execução do seu bloco em cada elemento.
numbers = [1, 2, 3, 4]
doubled = numbers.map { |n| n * 2 }
puts doubled # Saídas: 2, 4, 6, 8A principal diferença em relação ao each é que o map retorna um novo array com os valores transformados. O array original permanece inalterado.
Aqui está um exemplo prático que converte temperaturas de Celsius para Fahrenheit:
celsius = [0, 20, 100]
fahrenheit = celsius.map { |c| c * 9 / 5 + 32 }
puts fahrenheit # Saídas: 32, 68, 212Você também pode usar map com strings:
names = ["alice", "bob"]
capitalized = names.map { |name| name.capitalize }
puts capitalized # Saída: Alice, BobOs métodos map e collect são idênticos. O Ruby fornece ambos os nomes, para que você possa usar aquele que soar melhor em seu código. A maioria dos desenvolvedores Ruby prefere map porque é mais curto.
Desafio
FácilLeia uma única linha de entrada contendo números inteiros separados por vírgulas (ex: 2,4,6,8,10).
Divida a entrada em um array de inteiros e, em seguida, use o método map para criar um novo array onde cada número é elevado ao quadrado (multiplicado por si mesmo).
Imprima cada elemento do novo array de quadrados em sua própria linha.
Por exemplo, se a entrada for 2,4,6,8,10, a saída deve ser:
4
16
36
64
100Se a entrada for 1,2,3,4,5, a saída deve ser:
1
4
9
16
25Se a entrada for 3,7,11, a saída deve ser:
9
49
121Se a entrada for 10, a saída deve ser:
100Folha de consulta
O método map (também chamado de collect) transforma um array em um novo ao aplicar um bloco a cada elemento. Ele retorna um novo array com os valores transformados, deixando o array original inalterado.
numbers = [1, 2, 3, 4]
doubled = numbers.map { |n| n * 2 }
puts doubled # Saídas: 2, 4, 6, 8Exemplo com conversão de temperatura:
celsius = [0, 20, 100]
fahrenheit = celsius.map { |c| c * 9 / 5 + 32 }
puts fahrenheit # Saídas: 32, 68, 212Exemplo com strings:
names = ["alice", "bob"]
capitalized = names.map { |name| name.capitalize }
puts capitalized # Saídas: Alice, Bobmap e collect são métodos idênticos. A maioria dos desenvolvedores Ruby prefere map.
Experimente você mesmo
# Leia a entrada separada por vírgulas
input = gets.chomp
# TODO: Escreva seu código abaixo
# 1. Divida a string de entrada em um array de inteiros
# 2. Use o método map para elevar cada número ao quadrado
# 3. Imprima cada número ao quadrado em sua própria linhaEsta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
4Operadores Parte 2
Operadores Lógicos Parte 1Operadores Lógicos Parte 2Recapitulação - Lógica SimplesOperadores Lógicos Parte 3Operadores Lógicos Parte 47Calculadora de Divisão de Conta
Mensagem de Boas-vindasObtendo Entrada do Usuário10FizzBuzz com um Toque Especial
Visão Geral do JogoO Método FizzBuzz2Variáveis e Tipos de Dados
Números e VariáveisTipo de Dado StringTipo de Dado BooleanTipo de Dado SymbolVerificando Tipos de DadosConvenções de NomenclaturaRecapitulação - Criação de Variáveis5Tomada de Decisão
Instrução IfIf - ElseRecapitulação - Calculadora SimplesIf - Else AninhadoInstrução Unless8Laços de Repetição
Loop For com IntervalosLoop WhileBreakNextRecapitulação - FatorialLoop TimesLoop UntilLoops AninhadosRecapitulação - Entrada Dinâmica3Operadores Parte 1
Operadores AritméticosOperador de MóduloAtalhos AritméticosRecapitulação - Matemática SimplesOperadores de Comparação6IO Básico
Saída com putsSaída com print e pSaída com VariáveisEntrada com getsMétodo chompConversão de TiposRecapitulação - Calculadora de IdadeRecapitulação - Verdadeiro ou Falso9Métodos
Definindo um MétodoParâmetros de MétodoValores de RetornoRecapitulação - Método SigmaRecapitulação - Método de ValidaçãoValores de Parâmetro Padrão15Rastreador de Despesas Diárias
Visão Geral do ProjetoSair do Programa