Найти значение в массиве

Как найти значение в массиве с помощью Ruby 1.8.7?

Ответ 1

Я предполагаю, что вы пытаетесь найти, существует ли определенное значение внутри массива, и если это возможно, вы можете использовать Array # include? (значение):

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

Если вы имеете в виду что-то еще, проверьте API Ruby Array

Ответ 2

Использование Array#select даст вам массив элементов, соответствующих критериям. Но если вы ищете способ получить элемент из массива, который соответствует вашим критериям, Enumerable#detect будет лучшим способом:

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

В противном случае вам придется делать что-то неловкое, как:

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

Ответ 3

Как это?

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]               #=> []

или как это?

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

См. руководство.

Ответ 5

Использование:

myarray.index "valuetoFind"

Это вернет вам индекс нужного элемента или нуль, если ваш массив не содержит значения.

Ответ 6

Если вы хотите найти одно значение из массива, используйте 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?

Чтобы узнать, существует ли значение в массиве, кроме #includes? Вы также можете использовать #in? когда с ActiveSupport, который работает для любого объекта, отвечает на #include? :

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

Ответ 7

Этот ответ для всех, кто осознает принятый ответ, не затрагивает вопрос, который он в настоящее время написал.

В вопросе спрашивается, как найти значение в массиве. Принятый ответ показывает, как проверить, существует ли в массиве значение .

Уже существует пример использования index, поэтому я предоставляю пример с использованием метода 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]

Ответ 8

Я знаю, что на этот вопрос уже был дан ответ, но я пришел сюда, чтобы найти способ фильтровать элементы в массиве на основе некоторых критериев. Итак, вот мой пример решения: используя select, я нахожу все константы в классе, начинающиеся с "RUBY _"

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

ОБНОВЛЕНИЕ: Тем временем я обнаружил, что массив # grep работает намного лучше. Для приведенного выше примера

Class.constants.grep /^RUBY_/

сделал трюк.

Ответ 9

Спасибо за ответы.

Мне понравилось:

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

Ответ 10

Вы можете пойти на методы массива.

Чтобы увидеть все методы массива, используйте methods function with array. Например,

a = ["name", "surname"] 
a.methods

Кстати, вы можете использовать другой метод для проверки значения в массиве. Вы можете использовать a.include?("name").