Извините за вопросы такого типа, я здесь новичок, и я учусь использовать этот инструмент, я постараюсь найти ответы, прежде чем размещать здесь.
Лукас Ренан,
107
Всем, кто жалуется на подобные вопросы: прочтите FAQ: «Нет вопросов слишком тривиальных или слишком новичков». Если вам не нравится вопрос, не отвечайте на него, пусть это сделает кто-то другой. Если вопрос уже был задан и дан ответ на SO, то обязательно отметьте его как дубликат. Но нет причин ругать новичков за то, что они новички.
Брайан Кэмпбелл,
Ответы:
118
Я предполагаю, что вы пытаетесь определить, существует ли определенное значение внутри массива, и в этом случае вы можете использовать Array # include? (Value):
a =[1,2,3,4,5]
a.include?(3)# => true
a.include?(9)# => false
Если вы имеете в виду что-то еще, проверьте Ruby Array API
Я бы использовал Array # index, но проверка Ruby Array API - отличный совет.
Уиллиам Джадд
83
Использование Array#selectдаст вам массив элементов, соответствующих критериям. Но если вы ищете способ получить элемент из массива, который соответствует вашим критериям, Enumerable#detectбыло бы лучше:
array =[1,2,3]
found = array.select {|e| e ==3}#=> [3]
found = array.detect {|e| e ==3}#=> 3
В противном случае вам пришлось бы сделать что-нибудь неловкое, например:
Спасибо! Я знал, Enumerable#selectно #detectэто именно то, что я искал.
Джастин Адкинс,
1
array.select{}пройдется по всем элементам в массиве в поисках тех, которые соответствуют условию. array.findвместо этого вернет первый элемент, соответствующий условию. Так что предпочтительнее использовать array.find{ |e| e == 3 }тогдаarray.select{ |e| e == 3 }.first
Оскар Гонсалес
Думаю, вы имели в виду, что .find_index я не знаю, есть ли они.find
Росс Аттрилл,
28
Если вы хотите найти одно значение из массива, используйте Array#find:
Чтобы узнать, существует ли значение в массиве, вы также можете использовать #in?ActiveSupport. #in?работает для любого объекта, который реагирует на #include?:
@MarkThomas, пожалуйста, процитируйте часть моего ответа, которая, по вашему мнению, является неверной, и я с радостью обновлю ее. Я предполагаю, что мы здесь используем английский (а не придуманные определения слов). И когда тысячи людей ищут «рубиновое значение НАЙТИ в массиве» в Google, они видят этот вопрос как первый результат, поэтому я уверен, что все они хотели бы получить действительно правильный ответ.
Mike S
1
Кроме того, @MarkThomas, если вы были правы, этот вопрос следует закрыть, так как он дублирует stackoverflow.com/questions/1986386/… , но есть функциональная разница между «поиском» и «проверкой наличия» в массиве.
Mike S
У меня аллергия на людей, которые воскрешают старые вопросы и не дают больше существа. Такое случается очень часто. В вашем случае, хотя selectон уже был предоставлен в качестве ответа в 2009 году, вы предоставили образец фрагмента, который немного лучше. Поэтому, переосмыслив это, я отказываюсь от того, что сказал ранее.
Марк Томас
8
Я знаю, что на этот вопрос уже был дан ответ, но я пришел сюда в поисках способа фильтрации элементов в массиве на основе некоторых критериев. Итак, вот мой пример решения: используя select, я нахожу все константы в классе, которые начинаются с «RUBY_»
Class.constants.select {|c| c.to_s =~/^RUBY_/}
ОБНОВЛЕНИЕ: Тем временем я обнаружил, что Array # grep работает намного лучше. В приведенном выше примере
Ответы:
Я предполагаю, что вы пытаетесь определить, существует ли определенное значение внутри массива, и в этом случае вы можете использовать Array # include? (Value):
Если вы имеете в виду что-то еще, проверьте Ruby Array API
источник
Использование
Array#select
даст вам массив элементов, соответствующих критериям. Но если вы ищете способ получить элемент из массива, который соответствует вашим критериям,Enumerable#detect
было бы лучше:В противном случае вам пришлось бы сделать что-нибудь неловкое, например:
источник
Enumerable#select
но#detect
это именно то, что я искал.array.select{}
пройдется по всем элементам в массиве в поисках тех, которые соответствуют условию.array.find
вместо этого вернет первый элемент, соответствующий условию. Так что предпочтительнее использоватьarray.find{ |e| e == 3 }
тогдаarray.select{ |e| e == 3 }.first
.find_index
я не знаю, есть ли они.find
Если вы хотите найти одно значение из массива, используйте
Array#find
:Смотрите также:
Чтобы узнать, существует ли значение в массиве, вы также можете использовать
#in?
ActiveSupport.#in?
работает для любого объекта, который реагирует на#include?
:источник
Array#find
в ссылках на Ruby. Должно быть, это связано с Rails, раз уж об этом упоминали другие люди. Хммм ....Enumerable
, ruby-doc.org/core-2.7.1/Enumerable.html#method-i-findКак это?
или вот так?
См. Руководство .
источник
для этого вы можете использовать Array.select или Array.index .
источник
Использование:
myarray.index "valuetoFind"
Это вернет вам индекс нужного элемента или nil, если ваш массив не содержит значения.
источник
Этот ответ предназначен для всех, кто понимает, что принятый ответ не отвечает на вопрос в том виде, в котором он сейчас написан.
Вопрос спрашивает, как найти значение в массиве. В принятом ответе показано, как проверить, существует ли значение в массиве.
Пример использования уже есть
index
, поэтому я привожу пример использования этогоselect
метода.источник
select
он уже был предоставлен в качестве ответа в 2009 году, вы предоставили образец фрагмента, который немного лучше. Поэтому, переосмыслив это, я отказываюсь от того, что сказал ранее.Я знаю, что на этот вопрос уже был дан ответ, но я пришел сюда в поисках способа фильтрации элементов в массиве на основе некоторых критериев. Итак, вот мой пример решения: используя
select
, я нахожу все константы в классе, которые начинаются с «RUBY_»ОБНОВЛЕНИЕ: Тем временем я обнаружил, что Array # grep работает намного лучше. В приведенном выше примере
сделали свое дело.
источник
Class.constants.grep /^RUBY_/
сработало.Спасибо за ответы.
Мне понравилось вот что:
источник
Вы можете использовать методы массива.
Чтобы увидеть все методы массива, используйте
methods
функцию с массивом. Например,Кстати, вы можете использовать другой метод для проверки значения в массиве. Вы можете использовать
a.include?("name")
.источник