ruby detect

ruby - Método de detección de rubí



detect (4)

Seleccionar tiene sentido ¿Pero puede alguien explicarme. ¿Detectarme? No entiendo estos datos.

>> [1,2,3,4,5,6,7].detect { |x| x.between?(3,4) } => 3 >> [1,2,3,4,5,6,7].detect { |x| x.between?(3,6) } => 3 >> [1,2,3,4,5,6,7].detect { |x| x.between?(3,7) } => 3 >> [1,2,3,4,5,6,7].detect { |x| x.between?(2,7) } => 2 >> [1,2,3,4,5,6,7].detect { |x| x.between?(1,7) } => 1 >> [1,2,3,4,5,6,7].detect { |x| x.between?(6,7) } => 6 >> [1,2,3,4,5,6,7].select { |x| x.between?(6,7) } => [6, 7] >> [1,2,3,4,5,6,7].select { |x| x.between?(1,7) } => [1, 2, 3, 4, 5, 6, 7]


Detectar devuelve el primer elemento de la lista para el que el bloque devuelve VERDADERO. Tu primer ejemplo:

>> [1,2,3,4,5,6,7].detect { |x| x.between?(3,4) } => 3

Devuelve 3 porque es el primer elemento de la lista que devuelve VERDADERO para la expresión x.between?(3,4) .

detect detiene la iteración después de que la condición devuelve verdadero por primera vez. select repetirá hasta que se llegue al final de la lista de entrada y se devuelvan todos los elementos en los que el bloque devolvió verdadero.



detect simplemente devuelve el primer valor que satisface el predicado, si lo hubiera, de lo contrario, nil. select devuelve todos los valores que satisfacen el predicado. a.detect { p } es análogo a a.select { p }[0]

irb(main):001:0> [1,2,3].detect { true } => 1 irb(main):002:0> [1,2,3].detect { false } => nil irb(main):003:0> [1,2,3].detect { |x| x % 2 == 0 } => 2


find & detect siempre devolverá un solo objeto o devolverá nil si no coincide nada.

por ejemplo, [1,2,3,4,5,6,7] .detect {| x | x.between? (1,7)} => 1

find_all y select devolverán una serie de cosas que encuentre que coincidan.

por ejemplo, [1,2,3,4,5,6,7] .select {| x | x.between? (1,7)} => [1, 2, 3, 4, 5, 6, 7]

Link de referencia