Как убедиться, что определенные элементы не попадают в массивы в Ruby - PullRequest
0 голосов
/ 03 февраля 2012

У меня есть массив, скажем,

array1 = ["abc", "a", "wxyz", "ab",......]

Как убедиться, что ни один, например, «a» (любой 1 символ), «ab» (любой 2 символа), «abc» (любой 3символы), ни такие слова, как «то», «это», «что» и т. д., ни какие-либо грязные слова не сохраняются в array1?

Ответы [ 3 ]

3 голосов
/ 03 февраля 2012

Это удаляет элементы с менее чем 4 символами и такими словами, как, то, что из array1 (если я правильно понял):

array1.reject! do |el|
    el.length < 4 || ['this', 'that', 'what'].include?(el)
end

Это изменится array1. Если вы используете reject (без !), он вернет результат и не изменится array1

1 голос
/ 03 февраля 2012

Вы можете открыть и добавить новый интерфейс к классу Array, который запрещает определенные слова. Пример:

class Array
  def add(ele)
    unless rejects.include?(ele)
      self.push ele
    end
  end

  def rejects
    ['this', 'that', 'what']  
  end
end

arr = []

arr.add "one"
puts arr

arr.add "this"
puts arr

arr.add "aslam"
puts arr

Вывод будет:

Один Один Один Аслам

И заметьте, слово «это» не было добавлено.

0 голосов
/ 02 июля 2014

Вы можете создать список остановок.Использование хэша для этого будет более эффективным, чем для массива, поскольку время поиска будет согласовано с хэшем.Для массива время поиска пропорционально количеству элементов в массиве.Если вы собираетесь много раз проверять стоп-слова, я предлагаю использовать хеш, содержащий все стоп-слова.Используя свой код, вы можете сделать следующее

badwords_a = ["abc", "a", "wxyz", "ab"] # Your array of bad words
badwords_h = {}                         # Initialize and empty hash
badwords_a.each{|word| badwords_h[word] = nil}  # Fill the hash

goodwords = [] 

words_to_process = ["abc","a","Foo","Bar"] # a list of words you want to process

words_to_process.each do |word| # Process new words
 if badwords_h.key?(word)
 else
 goodwords << word  # Add the word if it did not match the bad list
 end
end

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