【发布时间】:2014-12-10 21:40:14
【问题描述】:
我是 Ruby 新手,正在尝试编写一个方法,该方法将返回字符串中最常见单词的数组。如果有一个单词计数很高,则应返回该单词。如果有两个单词与高计数相关,则两者都应在数组中返回。
问题是当我通过第二个字符串时,代码只计算“单词”两次而不是三次。当第三个字符串通过时,它返回计数为 2 的 "it",这没有意义,因为 "it" 的计数应该为 1。
def most_common(string)
counts = {}
words = string.downcase.tr(",.?!",'').split(' ')
words.uniq.each do |word|
counts[word] = 0
end
words.each do |word|
counts[word] = string.scan(word).count
end
max_quantity = counts.values.max
max_words = counts.select { |k, v| v == max_quantity }.keys
puts max_words
end
most_common('a short list of words with some words') #['words']
most_common('Words in a short, short words, lists of words!') #['words']
most_common('a short list of words with some short words in it') #['words', 'short']
【问题讨论】:
-
感谢大家的帮助。经过仔细检查,我发现在 words.each 中,我正在查看“字符串”而没有进行小写,这似乎解决了我的两个问题。
-
@NickVeys 给出了一个很好的答案(赢得了我的 +1),并且是唯一一个回答你的问题的人,所以你会用绿色复选标记来奖励它是可以理解的。但是,我建议您在将来选择答案之前推迟一段时间(可能是一个小时或更长时间),因为相对快速的选择往往会阻止其他可能更好的答案,并且还会抢占仍在准备答案的读者。
-
会的。对这一切仍然很陌生,并且正在学习其中的技巧。
-
This faq 值得一读。