我有一个数组可以说
array1 = ["abc", "a", "wxyz", "ab",......]
我如何确保例如“a”(任何1个字符),“ab”(任意2个字符),“abc”(任意3个字符),以及“that”,“this”,“在array1
?
答案 0 :(得分:3)
这会删除少于4个字符的元素和这样的单词,即array1
中的内容(如果我说得对):
array1.reject! do |el|
el.length < 4 || ['this', 'that', 'what'].include?(el)
end
这会更改array1
。如果您使用reject
(不包含!
),则会返回结果而不会更改array1
答案 1 :(得分:1)
您可以打开并向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
输出将是:
一一阿斯兰
注意没有添加“this”这个词。
答案 2 :(得分:0)
您可以创建一个停止列表。为此使用散列将比数组更有效,因为查找时间将与散列一致。对于数组,查找时间与数组中元素的数量成比例。如果你要经常检查停用词,我建议使用包含所有停用词的哈希值。使用您的代码,您可以执行以下操作
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(", ")