En Ruby, ¿cómo puedo encontrar un valor en una matriz?
En Ruby, ¿cómo puedo encontrar un valor en una matriz?
Respuestas:
Supongo que está tratando de encontrar si existe un cierto valor dentro de la matriz, y si ese es el caso, puede usar Array # include? (Value):
a = [1,2,3,4,5]
a.include?(3) # => true
a.include?(9) # => false
Si quiere decir algo más, consulte la API de Ruby Array
El uso Array#select
le dará una variedad de elementos que cumplen con los criterios. Pero si está buscando una forma de sacar el elemento de la matriz que cumpla con sus criterios, Enumerable#detect
sería una mejor manera de hacerlo:
array = [1,2,3]
found = array.select {|e| e == 3} #=> [3]
found = array.detect {|e| e == 3} #=> 3
De lo contrario, tendría que hacer algo incómodo como:
found = array.select {|e| e == 3}.first
Enumerable#select
pero #detect
es exactamente lo que estaba buscando.
array.select{}
pasará por todos los elementos de la matriz buscando aquellos que coincidan con la condición. array.find
en su lugar, devolverá el primer elemento que coincida con la condición. Entonces uso preferible array.find{ |e| e == 3 }
entoncesarray.select{ |e| e == 3 }.first
.find_index
que no sé si hay alguno.find
Si desea encontrar un valor de la matriz, use Array#find
:
arr = [1,2,6,4,9]
arr.find {|e| e%3 == 0} #=> 6
Ver también:
arr.select {|e| e%3 == 0} #=> [ 6, 9 ]
e.include? 6 #=> true
Para saber si existe un valor en una matriz, también puede usarlo #in?
cuando use ActiveSupport. #in?
funciona para cualquier objeto que responda a #include?
:
arr = [1, 6]
6.in? arr #=> true
Array#find
en las referencias de Ruby. Debe ser una cosa de Rails ya que otras personas lo han mencionado. Hmmm ....
Enumerable
, ruby-doc.org/core-2.7.1/Enumerable.html#method-i-find
¿Me gusta esto?
a = [ "a", "b", "c", "d", "e" ]
a[2] + a[0] + a[1] #=> "cab"
a[6] #=> nil
a[1, 2] #=> [ "b", "c" ]
a[1..3] #=> [ "b", "c", "d" ]
a[4..7] #=> [ "e" ]
a[6..10] #=> nil
a[-3, 3] #=> [ "c", "d", "e" ]
# special cases
a[5] #=> nil
a[5, 1] #=> []
a[5..10] #=> []
¿o así?
a = [ "a", "b", "c" ]
a.index("b") #=> 1
a.index("z") #=> nil
puede usar Array.select o Array.index para hacer eso.
Utilizar:
myarray.index "valuetoFind"
Eso le devolverá el índice del elemento que desea o nulo si su matriz no contiene el valor.
Esta respuesta es para todos los que se dan cuenta de que la respuesta aceptada no aborda la pregunta tal como está escrita actualmente.
La pregunta pregunta cómo encontrar un valor en una matriz. La respuesta aceptada muestra cómo verificar si existe un valor en una matriz.
Ya hay un ejemplo usando index
, así que estoy proporcionando un ejemplo usando el select
método.
1.9.3-p327 :012 > x = [1,2,3,4,5]
=> [1, 2, 3, 4, 5]
1.9.3-p327 :013 > x.select {|y| y == 1}
=> [1]
select
ya se proporcionó como respuesta en 2009, proporcionó un fragmento de muestra que es un poco mejor. Entonces, después de repensarlo, retracto lo que dije antes.
Sé que esta pregunta ya ha sido respondida, pero vine aquí buscando una forma de filtrar elementos en una matriz según algunos criterios. Así que aquí está mi ejemplo de solución: usando select
, encuentro todas las constantes en la clase que comienzan con "RUBY_"
Class.constants.select {|c| c.to_s =~ /^RUBY_/ }
ACTUALIZACIÓN: Mientras tanto, he descubierto que Array # grep funciona mucho mejor. Para el ejemplo anterior,
Class.constants.grep /^RUBY_/
Hizo el truco.
Class.constants.grep /^RUBY_/
hizo el truco.
Gracias por las respuestas
Me gustó esto:
puts 'find' if array.include?(value)
Puedes ir por métodos de matriz.
Para ver todos los métodos de matriz, utilice la methods
función con matriz. Por ejemplo,
a = ["name", "surname"]
a.methods
Por cierto, puede usar un método diferente para verificar el valor en la matriz que puede usar a.include?("name")
.