Perdón por este tipo de pregunta, soy novato aquí y estoy aprendiendo a usar esta herramienta. Intentaré encontrar las respuestas antes de publicar aquí.
Lucas Renan el
107
Para todos los que se quejan de este tipo de preguntas: lea las preguntas frecuentes: "Ninguna pregunta es demasiado trivial o demasiado" novata "". Si no le gusta la pregunta, no la responda y deje que alguien más lo haga. Si la pregunta ya ha sido formulada y respondida en SO, entonces seguro, márquela como un duplicado. Pero no hay razón para regañar a los recién llegados por ser nuevos.
Brian Campbell
Respuestas:
117
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
Usaría el índice Array #, pero verificar la API de Ruby Array es un gran consejo.
Wylliam Judd
82
El uso Array#selectle 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#detectserí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:
¡Gracias! Lo sabía, Enumerable#selectpero #detectes exactamente lo que estaba buscando.
Justin Adkins
1
array.select{}pasará por todos los elementos de la matriz buscando aquellos que coincidan con la condición. array.finden 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
Oscar Gonzalez
Creo que quisiste decir .find_index que no sé si hay alguno.find
Ross Attrill
26
Si desea encontrar un valor de la matriz, use Array#find:
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?:
@ MarkThomas, por favor, cita la parte de mi respuesta que estás afirmando que es una declaración incorrecta y con gusto la actualizaré. Supongo que estamos usando inglés aquí (no hay definiciones inventadas para palabras). Y cuando miles de personas buscan "ruby FIND value in array" en Google, ven esta pregunta como el primer resultado, por lo que estoy seguro de que a todos les encantaría obtener la respuesta correcta.
Mike S
1
Además, @MarkThomas si estaba en lo correcto, entonces esta pregunta debería cerrarse por ser un duplicado de stackoverflow.com/questions/1986386/… , pero hay una diferencia funcional entre "encontrar" y "verificar la existencia" en una matriz.
Mike S
Soy alérgico a la gente que resucita viejas preguntas y proporciona poca o ninguna sustancia. Esto pasa mucho. En su caso, aunque selectya 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.
Mark Thomas
8
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,
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):
Si quiere decir algo más, consulte la API de Ruby Array
fuente
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:De lo contrario, tendría que hacer algo incómodo como:
fuente
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 preferiblearray.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
:Ver también:
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?
:fuente
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?
¿o así?
Ver el manual .
fuente
puede usar Array.select o Array.index para hacer eso.
fuente
Utilizar:
myarray.index "valuetoFind"
Eso le devolverá el índice del elemento que desea o nulo si su matriz no contiene el valor.
fuente
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 elselect
método.fuente
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_"ACTUALIZACIÓN: Mientras tanto, he descubierto que Array # grep funciona mucho mejor. Para el ejemplo anterior,
Hizo el truco.
fuente
Class.constants.grep /^RUBY_/
hizo el truco.Gracias por las respuestas
Me gustó esto:
fuente
Puedes ir por métodos de matriz.
Para ver todos los métodos de matriz, utilice la
methods
función con matriz. Por ejemplo,Por cierto, puede usar un método diferente para verificar el valor en la matriz que puede usar
a.include?("name")
.fuente