Ruby-用于确定字符串中最常见字符(复数)的代码

Ruby-用于确定字符串中最常见字符(复数)的代码,ruby,counting,multiple-return-values,Ruby,Counting,Multiple Return Values,你们中那些将此标记为重复的人——认真地说,试着更负责任。您标记为相同的问题与我提出的问题大不相同。我已经得到了一个很好的答案,但对于类似主题的任何问题都没有 我原来的问题是: 我看到很多人问如何在字符串中找到最常见的字母。我的代码如下。但我想知道如何得到多个答案返回。也就是说,如果有多个字母的计数与最常见的相同,我如何让我的方法只返回这些字母和所有字母 def ltr(string) results = string.scan(/\w/).reduce(Hash.new(0)) {|h,c|

你们中那些将此标记为重复的人——认真地说,试着更负责任。您标记为相同的问题与我提出的问题大不相同。我已经得到了一个很好的答案,但对于类似主题的任何问题都没有

我原来的问题是:

我看到很多人问如何在字符串中找到最常见的字母。我的代码如下。但我想知道如何得到多个答案返回。也就是说,如果有多个字母的计数与最常见的相同,我如何让我的方法只返回这些字母和所有字母

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”、“o”和“t”。我当前的方法只返回计数为“4”的“t”。我如何让其他人也被退回


注意:在决定将问题标记为重复问题之前,请仔细阅读问题。有人提出的可能重复的问题只是说明如何计算字符的频率,而不是如何让它只返回最常见的字符。马特的答案很完美。

你的答案很好。只需继续遍历结果数组,只保留计数与第一项计数相同的元素:

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

您想数一数字符串中的字符/字母吗?
scan(/\w/)
似乎与
chars
@SagarPandya:不,
scan(/./)
chars
相同(只是速度较慢)<例如,代码>扫描(/\w/)不会占用空格或函数间的空间。谢谢Matt,这太完美了。我还没有学会“趁时间”的方法。非常有用!只是好奇,在这个“顶部”变量中发生了什么?为什么有必要在“排序”后放置两个位置“[0][1]”?如何允许两个以上的答案,如我们示例中的3个?它们是否表示每个答案的键和值?