Menu
Coddy logo textTech

Select y Reject

Parte de la sección Lógica y flujo del Journey de Ruby de Coddy — lección 21 de 56.

El método select devuelve un nuevo array que contiene solo los elementos para los cuales el bloque devuelve un valor verdadero (truthy). Es la forma en que Ruby escribe "filter".

numbers = [1, 2, 3, 4, 5, 6]
evens = numbers.select { |n| n.even? }
puts evens.inspect   # [2, 4, 6]

reject es lo opuesto, mantiene todo aquello para lo cual el bloque devuelve false:

odds = numbers.reject { |n| n.even? }
puts odds.inspect    # [1, 3, 5]

Ambos devuelven un nuevo array; el original permanece intacto.

El bloque es simplemente un predicado, cualquier cosa que se evalúe como verdadero o falso funciona:

words = ["hi", "hello", "hey", "yo"]
long  = words.select { |w| w.length >= 3 }
puts long.inspect    # ["hello", "hey"]
challenge icon

Desafío

Principiante

Lee una lista de enteros separados por comas. Imprime dos líneas:

  1. Los números mayores que 10 (usa select), unidos con ,
  2. Los números no divisibles por 3 (usa reject), unidos con ,

Para la entrada 3,7,12,15,20, la salida es:

12, 15, 20
7, 20

Hoja de referencia

select devuelve un nuevo array con los elementos para los cuales el bloque es verdadero (como "filter"):

evens = [1,2,3,4].select { |n| n.even? }  # [2, 4]

reject es lo opuesto, manteniendo los elementos para los cuales el bloque es falso:

odds = [1,2,3,4].reject { |n| n.even? }   # [1, 3]

Ambos devuelven un nuevo array; el original permanece intacto.

Pruébalo tú mismo

numbers = gets.chomp.split(",").map(&:to_i)

# TODO: línea 1, números > 10, unidos con ", "
# TODO: línea 2, números NO divisibles por 3, unidos con ", "
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y flujo