将哈希值排序为一个值而不是其他值

时间:2012-02-22 06:28:14

标签: ruby sorting hash

Ruby的全新。我试图用发送的电子邮件数量对电子邮件FROM(发件人)的重复数据删除列表进行排序。此代码正在运行,但它按字母顺序排序。我无法弄清楚如何对它进行排序,以便大多数电子邮件排在最前面等等。

results = []
mail_count = imap.search(["SINCE", @this_week.strftime("%d-%b-%Y")]).each do |message_id|
  envelope = imap.fetch(message_id, "ENVELOPE")[0].attr["ENVELOPE"]
  @from_array = envelope.from[0].name.to_a
  results << @from_array
end

# make the hash default to 0 so that += will work correctly
from_count = Hash.new(0)

# iterate over the array, counting duplicate entries
results.each do |v|
  from_count[v] += 1
end

from_count.sort_by do |k, v| v 
      puts "#{v} -- #{k}"
end

1 个答案:

答案 0 :(得分:1)

from_count.sort_by{|k,v| v }

应该做的伎俩。

然后,您可以遍历已排序的哈希并打印结果。

那么你的代码就像这样:

from_count.sort_by{|k,v| v }.first(10).each{|k,v| puts "#{v} -- #{k}" }

sort_by对其进行排序,然后在排序完成后我们打印结果。