Encadeando o Map
Parte da seção Lógica e Fluxo do Journey de Ruby da Coddy — lição 22 de 56.
Você conheceu o map nos fundamentos; ele constrói um novo array transformando cada elemento. Seu real poder aparece quando você o encadeia com select, reject e companhia.
Cada método retorna um array, então chamar outro método no resultado apenas continua o processo:
numbers = [1, 2, 3, 4, 5]
result = numbers
.select { |n| n.odd? }
.map { |n| n * 10 }
puts result.inspect # [10, 30, 50]Leia a sequência de cima para baixo: comece com números, mantenha os ímpares, multiplique cada um por 10. Sem variáveis temporárias, sem loop.
O atalho &:method_name funciona sempre que o bloco apenas chama um método:
["hi", "yo"].map { |s| s.upcase } # ["HI", "YO"]
["hi", "yo"].map(&:upcase) # ["HI", "YO"] (mesmo)Essa abreviação está em toda parte no código Ruby. Reconheça-a quando a vir.
Desafio
FácilLeia uma lista de palavras separadas por vírgula. Imprima em uma única linha as palavras com mais de 3 caracteres, em letras maiúsculas, unidas por , .
Construa isso como uma única cadeia: select as longas, map elas com &:upcase, então join.
Para a entrada hi,hello,yo,coddy,sup, a saída é:
HELLO, CODDYFolha de consulta
Encadeie métodos de array — cada um retorna um novo array, então você pode continuar chamando métodos no resultado:
numbers = [1, 2, 3, 4, 5]
result = numbers
.select { |n| n.odd? }
.map { |n| n * 10 }
# [10, 30, 50]Use &:method_name como um atalho quando um bloco apenas chama um método:
["hi", "yo"].map(&:upcase) # ["HI", "YO"]Experimente você mesmo
words = gets.chomp.split(",")
# TODO: encadear select + map(&:upcase) + join
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica e Fluxo
1Strings a Fundo
Visão Geral de Métodos de StringInterpolação de StringsIterando sobre StringsSplit e JoinRecapitulação - String Weaver4Blocos, Procs e Lambdas
O que é um Bloco?do..end vs ChavesA palavra-chave yieldParâmetros de BlocoProcs e LambdasRecapitulação - Iterador Customizado7Hashes Parte 2
Hash.new com Valores PadrãoIterando em HashesHashes AninhadosMesclando e TransformandoRecapitulação - Contador de Frequência10Projeto - Registros de Alunos
Visão Geral do ProjetoAdicionar Aluno2Intervalos
O que é um Intervalo?Métodos de IntervaloIntervalos em Case / WhenRecapitulação - Prática com Intervalos5O Poder do Enumerable
Select e RejectEncadeando o MapReduce / Injectcount, all?, any?, none?group_by e partitionsort_by, min_by, max_byRecapitulação - Data Pipeline