2009-11-14 27 views
81

¿Cómo puedo encontrar un valor en Array usando Ruby 1.8.7?Buscar valor en Array

+0

Lo siento por este tipo de pregunta, soy novato aquí, y estoy aprendiendo a utilizar esta herramienta, voy a tratar encuentra las respuestas antes de publicarlas aquí. –

+90

Para todos los que se quejan de este tipo de pregunta: por favor, lea las preguntas frecuentes: "Ninguna pregunta es demasiado trivial o demasiado" novato "'. Si no te gusta la pregunta, no la respondas, y deja que alguien más lo haga. Si la pregunta ya se ha formulado y respondido en SO, entonces seguro, márcala como un duplicado. Pero no hay ninguna razón para regañar a los recién llegados por ser nuevos. –

Respuesta

91

supongo que usted está tratando de encontrar si existe un cierto valor dentro de la matriz, y si ese es el caso, se puede usar una matriz # include (valor):?

a = [1,2,3,4,5] 
a.include?(3) # => true 
a.include?(9) # => false 

Si significa algo más, consulte el Ruby Array API

+1

Usaría el índice Array #, pero consultar la API Ruby Array es un gran consejo. –

13

Uso:

myarray.index "valuetoFind"

que le devuelva el índice del elemento que desee o nula si la matriz no contiene el valor.

21

¿Le gusta a 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 ¿como?

a = [ "a", "b", "c" ] 
a.index("b") #=> 1 
a.index("z") #=> nil 

See the manual.

1

Gracias por responder.

lo hice así:

puts 'find' if array.include?(value) 
8

Sé que esta pregunta ya ha sido contestada, pero vine aquí en busca de una forma de filtrar elementos de una matriz basada en algunos criterios. Así que aquí está mi ejemplo solución: usar select, encuentro todas las constantes de la clase que comienzan con "RUBY_"

Class.constants.select {|c| c.to_s =~ /^RUBY_/ } 

ACTUALIZACIÓN: Mientras tanto he descubierto que el arreglo # grep funciona mucho mejor. Para el ejemplo anterior,

Class.constants.grep /^RUBY_/ 

hizo el truco.

+1

Mientras tanto, he descubierto que Array # grep funciona mucho mejor. Incluso para el ejemplo anterior, 'Class.constants.grep/^ RUBY_ /' hizo el truco. – mydoghasworms

8

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 se pregunta cómo encontrar un valor en una matriz. La respuesta aceptada muestra cómo verificar si existe un valor en una matriz.

Ya existe un ejemplo en el que se usa index, por lo que proporciono un ejemplo con el método select.

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] 
+0

@MarkThomas, por favor, indique la parte de mi respuesta que afirma que es una afirmación incorrecta y con gusto la actualizaré. Supongo que estamos usando el inglés aquí (no las definiciones de las palabras). Y cuando miles de personas buscan "ruby FIND value in array" en Google, ven esta pregunta como el primer resultado, así que estoy seguro de que a todos les encantaría obtener la respuesta correcta. –

+1

Además, @MarkThomas si tenía razón, entonces esta pregunta debería cerrarse por ser un duplicado de http://stackoverflow.com/questions/1986386/check-if-value-exists-in-array-in-ruby, pero no está una diferencia funcional entre "encontrar" y "verificar la existencia" en una matriz. –

+0

Soy alérgico a la gente que resucita viejas preguntas y proporciona poca o ninguna sustancia. Esto pasa mucho En su caso, aunque 'select' ya se proporcionó como respuesta en 2009, proporcionó un fragmento de muestra que es un poco mejor. Entonces, después de repensarlo, me retracto de lo que dije antes. –

33

Usando Array#select le dará una serie de elementos que cumplan los criterios.Pero si usted está buscando una manera de conseguir el elemento de la matriz que reúna sus criterios, Enumerable#detect sería un mejor camino a seguir:

array = [1,2,3] 
found = array.select {|e| e == 3} #=> [3] 
found = array.detect {|e| e == 3} #=> 3 

De lo contrario habría que hacer algo torpe como:

found = array.select {|e| e == 3}.first 
3

Si desea encontrar un valor de matriz, utilice Array#find

arr = [1,2,6,4,9] 
arr.find {|e| e%3 == 0} #=> 6 
arr.select {|e| e%3 == 0} #=> [ 6, 9 ] 

6.in? 

Para saber si existe un valor en una matriz, excepto #includes?, se También se puede utilizar cuando #in? con ActiveSupport, que funciona para cualquier objeto responde a #include?:

arr = [1, 6] 
6.in? arr 
#=> true 
Cuestiones relacionadas