【问题标题】:Ruby sort Hash By Inner Hash's count of same valueRuby按内部哈希的相同值计数对哈希进行排序
【发布时间】:2013-03-26 03:50:29
【问题描述】:

我有一个哈希值,我想要完成的是根据内部哈希值的相同值的计数对哈希值进行排序。所以假设这是我的哈希。

hash = { 
         "Run1"=>{"March 24, 2013"=>"failed", "March 23, 2013"=>"failed", "March 21, 2013"=>"failed", "March 19, 2013"=>"passed", "March 18, 2013"=>"passed"},
         "Run2"=>{"March 24, 2013"=>"failed", "March 23, 2013"=>"failed", "March 21, 2013"=>"failed", "March 19, 2013"=>"failed", "March 18, 2013"=>"failed"} 
       }

我想对哈希进行排序,以便 Run2 出现在 Run1 之前,因为我试图按运行“失败”的次数进行排序

我想我需要类似的东西

hash.sort_by{|key, innerHash| innerHash.values.count('failed')}

非常感谢任何帮助或建议

【问题讨论】:

  • Run1 = 3,Run2 = 5 的“失败”计数。因此代码将 Run1 放在首位。如果你想把大部分失败放在第一位,你应该算“通过”。
  • 或者,如果您有其他状态而不是通过/失败,那么您可以反转数组或传递负值。
  • 您的代码将按升序返回它们,因此只需反转返回的数组即可。 hash.sort_by{|key, innerHash| innerHash.values.count('failed')}.reverse

标签: ruby


【解决方案1】:

一个小修复:

hash.sort_by { |_,h| -h.values.count('failed') } # notice force negative

...应该可以工作。请记住 sort_by 总是返回一个数组,所以也许你想要:

sorted_hash = Hash[hash.sort_by { |_,h| -h.values.count('failed') }]

【讨论】:

  • 对于反转排序.reverse也可以追加到块中:sorted_hash = Hash[hash.sort_by{ |_,h| h.values.count('failed') }.reverse]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-25
  • 1970-01-01
  • 2011-02-02
  • 1970-01-01
  • 1970-01-01
  • 2010-10-20
  • 2011-03-10
相关资源
最近更新 更多