我有一个字符串数组:
phrases = ["Have a good Thanksgiving", "Eat lots of food"]
我有另一组单词:words = ["eat", "food"]
如果字符串包含第二个数组中的所有单词,我想返回第一个数组中的条目。
所以,看起来应该是这样的:
phrases.select{ |x| x.include_all?(words) }
我是否应该创建include_all?
函数来迭代words
数组的每个成员并进行比较,或者是否有任何我缺少的内置方法?
答案 0 :(得分:11)
你实际上非常接近解决方案。
phrases.select do |phrase|
words.all?{ |word| phrase.include? word }
end
all?
方法在Enumerable
上,如果块对集合中的每个项目的计算结果为true,则返回true。
根据您对“包含”这个词的短语的定义,您可能需要定义自己的include_all?
方法或String
上的方法来确定匹配项。 include?
方法区分大小写,不关心字边界。如果这些不是您的要求,您可以使用Regexp代替include?
或定义您自己的方法来包装该逻辑。