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 verdadeiro (truthy). É como o Ruby escreve "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 resulte em verdadeiro ou falso funciona:
words = ["hi", "hello", "hey", "yo"]
long = words.select { |w| w.length >= 3 }
puts long.inspect # ["hello", "hey"]Desafio
InicianteLeia uma lista de inteiros separados por vírgula. 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, 20Folha de consulta
select retorna um novo array com elementos para os quais o bloco é verdadeiro (como o "filter"):
evens = [1,2,3,4].select { |n| n.even? } # [2, 4]reject é o oposto, mantendo os elementos para os quais o bloco é falso:
odds = [1,2,3,4].reject { |n| n.even? } # [1, 3]Ambos retornam um novo array; o original permanece inalterado.
Experimente 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 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