Подтвердить что ты не робот

Совпадение шаблона в массиве

Существует массив с 2 элементами

test = ["i am a boy", "i am a girl"]

Я хочу проверить, найдена ли строка внутри элементов массива, скажем:

test.include("boy")  ==> true
test.include("frog") ==> false

Могу ли я сделать это так?

4b9b3361

Ответ 1

Использование 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

Ответ 2

Ну вы можете grep (regex) вот так:

test.grep /boy/

или даже лучше

test.grep(/boy/).any?

Ответ 3

Я взял фрагмент 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

Ответ 4

Также вы можете сделать

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

Ответ 5

Если вы хотите проверить, включено ли слово в элементы массива, вы можете использовать такой метод:

def included? array, word
  array.inject([]) { |sum, e| sum + e.split }.include? word
end

Ответ 6

Если вы не возражаете против 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