2013-03-25 79 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