Ruby - Как проверить, содержит ли строка все слова в массиве? - PullRequest
7 голосов
/ 08 ноября 2011

У меня есть массив строк: phrases = ["Have a good Thanksgiving", "Eat lots of food"]

У меня есть еще один массив отдельных слов: words = ["eat", "food"]

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

Итак, это должно выглядеть примерно так:
phrases.select{ |x| x.include_all?(words) }

Должен ли я просто создать функцию include_all? для перебора каждого элемента массива words и выполнить сравнение, или есть какие-то встроенные методы, которые мне не хватает?

1 Ответ

11 голосов
/ 08 ноября 2011

Вы на самом деле очень близки к решению.

phrases.select do |phrase|
  words.all?{ |word| phrase.include? word }
end

Метод all? имеет значение Enumerable и возвращает значение true, если блок имеет значение true для каждого элемента в коллекции.

В зависимости от того, как именно вы определяете фразу «включая» слово, вы можете определить свой собственный метод include_all? или метод на String для определения соответствия. Метод include? чувствителен к регистру и не заботится о границах слов. Если это не ваши требования, вы можете использовать Regexp вместо include? или определить свой собственный метод, чтобы обернуть эту логику.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...