2013-03-25 81 views
0

我有哈希散列,我试图完成的是根据相同值的内部哈希计数的计数排序哈希。所以我们假设这是我的散列。红宝石排序哈希通过内部哈希计数相同的值

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')} 

任何帮助或建议是极大的赞赏

+2

数量,使得代码把RUN1第一。如果你想首先失败,你应该算'通过'。 – 2013-03-25 19:28:42

+0

或者如果你有其他状态比传递/失败,那么你可以颠倒一个数组或传递负值。 – Hauleth 2013-03-25 19:36:58

+1

您的代码将按升序返回它们,所以只需将返回的数组反转即可。 hash.sort_by {| key,innerHash | innerHash.values.count('failed')}。 – engineersmnky 2013-03-25 19:47:13

回答

3

阿律修正:

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

...应该工作。以记sort_by总是返回一个数组,所以也许你会想:的“失败”的RUN1 = 3,对于RUN2 = 5

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

反向排序'.reverse'也可以附加到该块上:'sorted_hash = Hash [hash.sort_by {| _,h | h.values.count('failed')} .reverse]' – 2013-03-25 19:52:17

+0

非常感谢您的帮助! – aahrens 2013-03-25 20:27:27