Encadeando Map
Parte da seção Lógica e Fluxo do Journey de Ruby da Coddy. Lição 22 de 56.
Você conheceu map nos fundamentos; ele cria um novo array transformando cada elemento. Seu verdadeiro poder aparece quando você o encadeia com select, reject e outros.
Cada método retorna um array, então chamar outro método no resultado faz com que a sequência continue:
numbers = [1, 2, 3, 4, 5]
result = numbers
.select { |n| n.odd? }
.map { |n| n * 10 }
puts result.inspect # [10, 30, 50]Leia a cadeia de cima para baixo: comece com números, mantenha os ímpares e 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"] (igual)Esta forma abreviada aparece em todo lugar no código Ruby. Reconheça-a quando a vir.
Desafio
FácilLeia uma lista de palavras separadas por vírgulas. Imprima em uma única linha as palavras com mais de 3 caracteres, em maiúsculas, unidas com , .
Construa isso como uma única cadeia: faça select das palavras longas, aplique map a elas com &:upcase e, em seguida, use join.
Para a entrada hi,hello,yo,coddy,sup, a saída é:
HELLO, CODDYExperimente você mesmo
words = gets.chomp.split(",")
# TODO: encadeie 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 em Profundidade
Visão Geral dos Métodos de StringInterpolação de StringsPercorrendo StringsDividir e UnirRecapitulação - String Weaver4Blocos, Procs e Lambdas
O que é um Bloco?do..end vs ChavesA Palavra-chave yieldParâmetros de BlocoProcs e LambdasRevisão - Iterador Personalizado7Hashes - Parte 2
Hash.new com Valores PadrãoIterando sobre 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 / WhenRevisão - Prática com intervalos5Potência do Enumerable
Select e RejectEncadeando MapReduce / Injectcount, all?, any?, none?group_by e partitionsort_by, min_by, max_byRecapitulação - Pipeline de DadosPratique por conta própria: Compilador de Ruby online