Как проверить, содержит ли каждое слово в массиве подстроку, и отклонить их в Ruby на Rails? - PullRequest
2 голосов
/ 29 января 2020
a = ["SUPER", "SOME_VALID", "ROME_INVALID", "SUPER_GOOD"]
a = a.reject { |x| x.in? ["GOOD", "VALID"]}
#=> ["SUPER", "SOME_VALID", "ROME_INVALID", "SUPER_GOOD"]

Мне не нужны слова, содержащие подстроку VALID или GOOD.

Вывод должен быть только ["SUPER"].

Ответы [ 4 ]

4 голосов
/ 29 января 2020

grep_v будет работать:

a = ["SUPER", "SOME_VALID", "ROME_INVALID", "SUPER_GOOD"]
a = a.grep_v(/GOOD|VALID/)
#=> ["SUPER"]
3 голосов
/ 29 января 2020

Вы могли бы сказать это:

a = a.reject { |x| x.include?("GOOD") || x.include?("VALID")}
3 голосов
/ 29 января 2020

Что in? делает, чтобы проверить, присутствует ли получатель в массиве, переданном в качестве аргумента, что означает:

1.in?([1, 2]) # true
3.in?([1, 2]) # false

То есть, он проверяет «целый» объект, а не часть этого.

Если вы хотите отклонить элементы в вашем массиве, которые соответствуют VALID и / или GOOD, вы можете использовать =~:

["SUPER", "SOME_VALID", "ROME_INVALID", "SUPER_GOOD"].reject { |word| word =~ /VALID|GOOD/ } # ["SUPER"]

Уведомление это также будет отвергать такие слова, как "VALIDITY", "GOODNESS" и др. c.

0 голосов
/ 29 января 2020

Вы можете использовать include?:

a.reject { |x| ["GOOD", "VALID"].any?{ |word| x.include?(word) } }
#=> ["SUPER"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...