Как в Ruby найти значение в массиве?
Как в Ruby найти значение в массиве?
Ответы:
Я предполагаю, что вы пытаетесь определить, существует ли определенное значение внутри массива, и в этом случае вы можете использовать Array # include? (Value):
a = [1,2,3,4,5]
a.include?(3) # => true
a.include?(9) # => false
Если вы имеете в виду что-то еще, проверьте Ruby Array API
Использование 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
Enumerable#select
но #detect
это именно то, что я искал.
array.select{}
пройдется по всем элементам в массиве в поисках тех, которые соответствуют условию. array.find
вместо этого вернет первый элемент, соответствующий условию. Так что предпочтительнее использовать array.find{ |e| e == 3 }
тогдаarray.select{ |e| e == 3 }.first
.find_index
я не знаю, есть ли они.find
Если вы хотите найти одно значение из массива, используйте Array#find
:
arr = [1,2,6,4,9]
arr.find {|e| e%3 == 0} #=> 6
Смотрите также:
arr.select {|e| e%3 == 0} #=> [ 6, 9 ]
e.include? 6 #=> true
Чтобы узнать, существует ли значение в массиве, вы также можете использовать #in?
ActiveSupport. #in?
работает для любого объекта, который реагирует на #include?
:
arr = [1, 6]
6.in? arr #=> true
Array#find
в ссылках на Ruby. Должно быть, это связано с Rails, раз уж об этом упоминали другие люди. Хммм ....
Enumerable
, ruby-doc.org/core-2.7.1/Enumerable.html#method-i-find
Как это?
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
для этого вы можете использовать Array.select или Array.index .
Использование:
myarray.index "valuetoFind"
Это вернет вам индекс нужного элемента или nil, если ваш массив не содержит значения.
Этот ответ предназначен для всех, кто понимает, что принятый ответ не отвечает на вопрос в том виде, в котором он сейчас написан.
Вопрос спрашивает, как найти значение в массиве. В принятом ответе показано, как проверить, существует ли значение в массиве.
Пример использования уже есть 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]
select
он уже был предоставлен в качестве ответа в 2009 году, вы предоставили образец фрагмента, который немного лучше. Поэтому, переосмыслив это, я отказываюсь от того, что сказал ранее.
Я знаю, что на этот вопрос уже был дан ответ, но я пришел сюда в поисках способа фильтрации элементов в массиве на основе некоторых критериев. Итак, вот мой пример решения: используя select
, я нахожу все константы в классе, которые начинаются с «RUBY_»
Class.constants.select {|c| c.to_s =~ /^RUBY_/ }
ОБНОВЛЕНИЕ: Тем временем я обнаружил, что Array # grep работает намного лучше. В приведенном выше примере
Class.constants.grep /^RUBY_/
сделали свое дело.
Class.constants.grep /^RUBY_/
сработало.
Спасибо за ответы.
Мне понравилось вот что:
puts 'find' if array.include?(value)
Вы можете использовать методы массива.
Чтобы увидеть все методы массива, используйте methods
функцию с массивом. Например,
a = ["name", "surname"]
a.methods
Кстати, вы можете использовать другой метод для проверки значения в массиве. Вы можете использовать a.include?("name")
.