Удалить негативные слова из предложений - PullRequest
0 голосов
/ 31 января 2019

Приведенный ниже метод neutralize предназначен для удаления отрицательных слов из предложений.

def neutralize(sentence)
  words = sentence.split(' ')
  words.each do |word|
    words.delete(word) if negative?(word)
  end
  words.join(' ')
end

def negative?(word)
  [
    'dull',
    'boring',
    'annoying',
    'chaotic'
  ].include?(word)
end

Однако удалить их все не удается.Тогда как я ожидал получить:

"These cards are part of a board game."

Я получил следующий результат:

neutralize('These dull boring cards are part of a chaotic board game.')
# => "These boring cards are part of a board game."

1 Ответ

0 голосов
/ 31 января 2019

Рассматривали ли вы использование delete_if?

def neutralize(sentence)
  words = sentence.split(' ')
  words.delete_if { |word| negative? word }
  words.join(' ')
end

def negative?(word)
  [ 'dull', 'boring', 'annoying', 'chaotic' ].include? word
end

puts neutralize('These dull boring cards are part of a chaotic board game.')

Изменение массива, для которого вы выполняете итерацию, может вызвать проблемы.Например:

a = [1, 2, 3, 4]
a.each { |i| a.delete i }
p a
# => [2, 4]

Вам следует избегать этого при большинстве обстоятельств.

Чтобы лучше понять, почему вывод такой, какой он есть, см. Этот пример:

a = [1, 2, 3, 4, 5, 6]
a.each_with_index do |item, index|
  puts "deleting item #{item} at index #{index}:"
  a.delete item
  p a
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...