我是一名新手Ruby程序员并且尝试编写一个方法,它将返回字符串中最常见单词的数组。如果有一个单词出现次数最多,那么应该只返回这个单词。如果有两个单词出现次数相同最高,那么这两个单词都应该在一个数组中返回。
问题在于当我传入第二个字符串时,代码只计算了“单词”两次而不是三次。当传入第三个字符串时,代码会返回具有2次计数的“it”,这毫无意义,因为“it”应该只有1次计数。
问题在于当我传入第二个字符串时,代码只计算了“单词”两次而不是三次。当传入第三个字符串时,代码会返回具有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']