Select e Reject
Parte da seção Lógica e Fluxo do Journey de Ruby da Coddy. Lição 21 de 56.
O método select retorna um novo array contendo apenas os elementos para os quais o bloco retorna um valor truthy. É assim que o Ruby chama “filter”.
numbers = [1, 2, 3, 4, 5, 6]
evens = numbers.select { |n| n.even? }
puts evens.inspect # [2, 4, 6]reject é o oposto: ele mantém tudo para o qual o bloco retorna false:
odds = numbers.reject { |n| n.even? }
puts odds.inspect # [1, 3, 5]Ambos retornam um novo array; o original permanece inalterado.
O bloco é apenas um predicado; qualquer coisa que seja avaliada como verdadeira ou falsa funciona:
words = ["hi", "hello", "hey", "yo"]
long = words.select { |w| w.length >= 3 }
puts long.inspect # ["hello", "hey"]Desafio
InicianteLeia uma lista de números inteiros separados por vírgulas. Imprima duas linhas:
- Os números maiores que
10(useselect), unidos por, - Os números não divisíveis por
3(usereject), unidos por,
Para a entrada 3,7,12,15,20, a saída é:
12, 15, 20
7, 20Experimente você mesmo
numbers = gets.chomp.split(",").map(&:to_i)
# TODO: linha 1, números > 10, unidos com ", "
# TODO: linha 2, números NÃO divisíveis por 3, unidos com ", "
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