Существует массив с 2 элементами
test = ["i am a boy", "i am a girl"]
Я хочу проверить, найдена ли строка внутри элементов массива, скажем:
test.include("boy") ==> true
test.include("frog") ==> false
Могу ли я сделать это так?
Существует массив с 2 элементами
test = ["i am a boy", "i am a girl"]
Я хочу проверить, найдена ли строка внутри элементов массива, скажем:
test.include("boy") ==> true
test.include("frog") ==> false
Могу ли я сделать это так?
Использование Regex.
test = ["i am a boy" , "i am a girl"]
test.find { |e| /boy/ =~ e } #=> "i am a boy"
test.find { |e| /frog/ =~ e } #=> nil
Ну вы можете grep (regex) вот так:
test.grep /boy/
или даже лучше
test.grep(/boy/).any?
Я взял фрагмент Peters и немного изменил его, чтобы совместить строку, а не значение массива
ary = ["Home:Products:Glass", "Home:Products:Crystal"]
string = "Home:Products:Glass:Glasswear:Drinking Glasses"
Использование:
ary.partial_include? string
Первый элемент массива вернет true, ему не нужно соответствовать всей строке.
class Array
def partial_include? search
self.each do |e|
return true if search.include?(e.to_s)
end
return false
end
end
Также вы можете сделать
test = ["i am a boy" , "i am a girl"]
msg = 'boy'
test.select{|x| x.match(msg) }.length > 0
=> true
msg = 'frog'
test.select{|x| x.match(msg) }.length > 0
=> false
Если вы хотите проверить, включено ли слово в элементы массива, вы можете использовать такой метод:
def included? array, word
array.inject([]) { |sum, e| sum + e.split }.include? word
end
Если вы не возражаете против monkeypatch класса Array, вы можете сделать это, как это
test = ["i am a boy" , "i am a girl"]
class Array
def partial_include? search
self.each do |e|
return true if e[search]
end
return false
end
end
p test.include?("boy") #==>false
p test.include?("frog") #==>false
p test.partial_include?("boy") #==>true
p test.partial_include?("frog") #==>false
Если вы просто ищете прямую совпадение, include?
уже доступен в Ruby. Ответьте на вопрос из аналогичного вопроса о переполнении стека: