我正在用ruby编写一个小项目,它从网站上获取所有单词,然后对它们进行简短的排序。
要验证排序的内容实际上是有效的英语,我将一组已删除的单词与基本的unix / osx单词文件进行比较。
执行此操作的方法是spell_check
方法。问题是,当在小数组上使用时工作正常,但是对于较大的数组,它会让非单词通过。有什么想法吗?
def spell_check (words_array)
dictionary = IO.read "./words.txt"
dictionary = dictionary.split
dictionary.map{|x| x.strip }
words_array.each do |word|
if !(dictionary.include? word)
words_array.delete word
end
end
return words_array
end
答案 0 :(得分:1)
我简化了你的代码,也许这会有效吗?
def spell_check(words)
lines = IO.readlines('./words.txt').map { |line| line.strip }
words.reject { |word| !lines.include? word }
end
我注意到您在使用words_array
进行迭代时尝试修改each
:
words_array.each do |word|
if !(dictionary.include? word)
words_array.delete word # Delete the word from words_array while iterating!
end
end
我不确定Ruby中是否就是这种情况,但是在其他编程语言(如Java和C#)中,尝试修改集合,同时在同时迭代它时,会使迭代,并产生意外行为,或只是抛出错误。也许这是您原始代码的问题?
此外,原始代码中不需要return
语句,因为始终返回在Ruby块中计算的最后一个语句(除非在最后一个语句之前有一个显式return
)。在这种情况下,它是惯用的Ruby。