Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 按一个值而不是另一个值对哈希进行排序_Ruby_Sorting_Hash - Fatal编程技术网

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")[

对Ruby来说是全新的。我正在尝试将来自(发件人)的邮件的重复数据消除列表与已发送的#封邮件进行排序。此代码正在运行,但它按字母顺序排序。我不知道如何对它进行排序,以使大多数电子邮件位于顶部,等等

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)
。我又编辑了一遍。请参阅和文档以了解许多令人惊奇的方法。