2017-01-30 53 views
0

我有一個哈希看起來像這樣:比較哈希散列和紅寶石返回特定鍵的最低值

h = { "C6"=> 
     { "G1"=>{"term_difference"=>15.1, "spread"=>7.6 }, 
     "G2"=>{"term_difference"=>13.7, "spread"=>7.0 }, 
     "G3"=>{"term_difference"=>8.2, "spread"=>6.0 }, 
     "G4"=>{"term_difference"=>4.0, "spread"=>3.8 }, 
     "G5"=>{"term_difference"=>0.9, "spread"=>1.8 } 
     } 
    } 

我需要做的是返回一個哈希看起來像這樣:

{ "C6"=> 
    { 
    "G5"=>{"term_difference"=>0.9, "spread"=>1.8} 
    } 
} 

結果是具有最低term_difference值的散列。

我一直在試圖弄清楚這一點,但似乎無法破解它。

任何幫助將不勝感激!

回答

1
h.map { |k,v| [k, [v.min_by { |_,v| v["term_difference"] }].to_h ] }.to_h 
    #=> {"C6"=>{"G5"=>{"term_difference"=>0.9, "spread"=>1.8}}} 
+1

更一般地說:'Hash [h.map {| k,v | [k,[v.min_by {| _,v | v [「term_difference」]}]。to_h]}]' – Amadan

+1

注意:'#to_h'可用於Ruby 2.x或更高版本。 – Surya

+0

@Surya,是的。我經常提到這幾年,直到它變得太麻煩。 :-) –