Reputation: 63567
I want to check if any elements in this array words = ["foo", "bar", "spooky", "rick james"]
are substrings of the phrase sentence = "something spooky this way comes"
.
Return true if there is any match, false if not.
My current solution (works but probably inefficient, I'm still learning Ruby):
is_there_a_substring = false
words.each do |word|
if sentence.includes?(word)
is_there_a_substring = true
break
end
end
return is_there_a_substring
Upvotes: 9
Views: 7003
Reputation: 176645
Your solution is efficient, it's just not as expressive as Ruby allows you to be. Ruby provides the Enumerable#any?
method to express what you are doing with that loop:
words.any? { |word| sentence.include?(word) }
Upvotes: 23
Reputation: 114138
Another option is to use a regular expression:
if Regexp.union(words) =~ sentence
# ...
end
Upvotes: 5