Ruby 按一个值而不是另一个值对哈希进行排序
对Ruby来说是全新的。我正在尝试将来自(发件人)的邮件的重复数据消除列表与已发送的#封邮件进行排序。此代码正在运行,但它按字母顺序排序。我不知道如何对它进行排序,以使大多数电子邮件位于顶部,等等Ruby 按一个值而不是另一个值对哈希进行排序,ruby,sorting,hash,Ruby,Sorting,Hash,对Ruby来说是全新的。我正在尝试将来自(发件人)的邮件的重复数据消除列表与已发送的#封邮件进行排序。此代码正在运行,但它按字母顺序排序。我不知道如何对它进行排序,以使大多数电子邮件位于顶部,等等 results = [] mail_count = imap.search(["SINCE", @this_week.strftime("%d-%b-%Y")]).each do |message_id| envelope = imap.fetch(message_id, "ENVELOPE")[
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
results=[]
mail_count=imap.search([“自”、@this_week.strftime(“%d-%b-%Y”)))。每个都有一个消息id|
envelope=imap.fetch(message_id,“信封”)[0]。attr[“信封”]
@from_array=envelope.from[0].name.to_a
结果
我们应该做到这一点
然后可以迭代排序的散列并打印结果
那么您的代码将如下所示:
from_count.sort_by{|k,v| v }.first(10).each{|k,v| puts "#{v} -- #{k}" }
sort\u by
对其进行排序,然后在完成排序后,我们打印结果
我们应该做到这一点
然后可以迭代排序的散列并打印结果
那么您的代码将如下所示:
from_count.sort_by{|k,v| v }.first(10).each{|k,v| puts "#{v} -- #{k}" }
sort_by
对它进行排序,然后当排序完成时,我们打印结果。当我这样做并尝试添加“put”#{v}--#{k}“我得到一个错误,未定义局部变量或方法'v'不添加puts语句放入
返回
nil并搞砸了排序。我想我有点不知所措了--不知道如何以10--FROMa,9--FROMb等格式打印排序后的散列。它以前打印得很好,只是按字母顺序而不是按数字排序。谢谢!你刚才让我大吃一惊。最后一个问题,如果你不介意的话。如何仅显示最终看跌期权的前10个?使用first(10)
。我又编辑了一遍。请参阅和文档以了解许多令人惊奇的方法。当我这样做并尝试添加“put”#{v}--#{k}“我得到一个错误,未定义局部变量或方法'v'不添加puts语句放入
返回nil并搞砸了排序。我想我有点不知所措了--不知道如何以10--FROMa,9--FROMb等格式打印排序后的散列。它以前打印得很好,只是按字母顺序而不是按数字排序。谢谢!你刚才让我大吃一惊。最后一个问题,如果你不介意的话。如何仅显示最终看跌期权的前10个?使用first(10)
。我又编辑了一遍。请参阅和文档以了解许多令人惊奇的方法。