Проверка подстрок в массиве и замена их в ruby - PullRequest
0 голосов
/ 11 марта 2019

Меня просят написать программу, которая заменяет слова в массиве test_tweets, которые соответствуют словам в массиве banned_phrases, на "CENSORED".

test_tweets = [
  "This politician sucks!",
  "I hate this Government!",
  "I can't believe we're living with such a bad politician. We were so foolish",
  "Politicianname is a danger to society. I hate that he's so bad – it sucks."
  ]

banned_phrases = ["sucks", "bad", "hate", "foolish", "danger to society"]

Я не могу понять, чтометод достигает этого.

Ответы [ 2 ]

0 голосов
/ 11 марта 2019
re = Regexp.union(banned_phrases)
# => /sucks|bad|hate|foolish|danger\ to\ society/
test_tweets.map{|s| s.gsub(re, "CENSORED")}

Выходы:

[
  "This politician CENSORED!",
  "I CENSORED this Government!",
  "I can't believe we're living with such a CENSORED politician. We were so CENSORED",
  "Politicianname is a CENSORED. I CENSORED that he's so CENSORED – it CENSORED."
]
0 голосов
/ 11 марта 2019

Попробуйте map + inject:

filtered = test_tweets.map do |tweet|
  banned_phrases.inject(tweet) do |r, phrase|
    r.gsub phrase, 'CENSORED'
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...