那些将此标记为重复的人 - 认真地,尝试更负责任。您标记为相同的问题与我提出的问题完全不同。我已经得到了一个很好的答案,这个答案在任何有关类似主题的问题上都没有。
我的原始问题:
我看到很多人都问如何在字符串中找到最常见的字母。我的代码如下。但是我想知道如何获得多个回答。也就是说,如果有几个字母与最常见的字母数相同,我如何让我的方法只返回那些字母和所有字母?
def ltr(string)
results = string.scan(/\w/).reduce(Hash.new(0)) {|h,c| h[c] += 1; h}
sorted = results.sort_by{|key,value| value}
sorted[-1]
end
例如,如果我输入到此方法的字符串是("哦,我讨厌早上起床")...每个字母都有4个' h& #39;,' o'和' t'。我目前的方法只返回&#t; t'计数为' 4'。我如何让其他人也被退回?
注意:在您决定将其标记为重复之前,请仔细阅读问题。建议作为可能重复的问题只是简单地说明了如何计算字符的频率,而不是如何让它只返回最常见的字符。马特的答案是完美的。
答案 0 :(得分:0)
你有一个很好的答案。只需继续通过生成的数组,只保留计数与第一项的计数一样高的元素:
def ltr(string)
results = string.scan(/\w/).reduce(Hash.new(0)) {|h,c| h[c] += 1; h}
sorted = results.sort_by{|key,value| value}.reverse
top = sorted[0][1]
sorted.take_while{|key,value| value == top}
end