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"]Desafío
PrincipianteLee una lista de enteros separados por comas. Imprime dos líneas:
- Los números mayores que
10(usaselect), unidos con, - Los números no divisibles por
3(usareject), unidos con,
Para la entrada 3,7,12,15,20, la salida es:
12, 15, 20
7, 20Hoja 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 ", "
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
1Strings en profundidad
Visión general de los métodos de StringInterpolación de StringsIterar sobre StringsSplit y JoinRepaso - String Weaver4Bloques, Procs y Lambdas
¿Qué es un bloque?do..end vs llavesLa palabra clave yieldParámetros de bloqueProcs y LambdasResumen - Iterador personalizado7Hashes Parte 2
Hash.new con valores por defectoIteración de HashesHashes anidadosFusión y transformaciónResumen - Contador de frecuencia10Proyecto - Registros de Estudiantes
Descripción general del proyectoAgregar estudiante5Potencia de Enumerable
Select y RejectEncadenando MapReduce / Injectcount, all?, any?, none?group_by y partitionsort_by, min_by, max_byResumen - Data Pipeline