2011-10-06 52 views
0

考慮我有散列的數組(這是我的地圖從MongoDB的輸出/減少),這類似於以下內容:紅寶石轉化散,組合多個值

[ 
    {"minute"=>30.0, "hour"=>15.0, "date"=>5.0, "month"=>9.0, "year"=>2011.0, "type"=>10.0, "count"=>299.0}, 
    {"minute"=>0.0, "hour"=>16.0, "date"=>5.0, "month"=>9.0, "year"=>2011.0, "type"=>10.0, "count"=>477.0}, 
    ... 
] 

但我不希望所有那些與時間相關的鍵和值,我想將它們合併到每個對象的日期對象中,將符號用作我的鍵而不是字符串會更有效嗎?

[ 
    {timestamp: DateTime.new(2011.0, 9.0, 5.0, 15.0, 30.0), count: 299, type: 10}, 
    {timestamp: DateTime.new(2011.0, 9.0, 5.0, 16.0, 0.0), count: 477, type: 10}, 
    ... 
] 

任何幫助,這將是非常棒的。謝謝!

+1

它只是一個地圖,我沒有看到這個問題...至少展示你試過的東西。 – tokland

回答

2

的直截了當的方法可能是,你會得到一樣好,如果你是數組a則:

pancakes = a.map do |h| 
    { 
     :timestamp => DateTime.new(h['year'], h['month'], h['date'], h['hour'], h['minute']), 
     :count  => h['count'].to_i, 
     :type  => h['type'].to_i 
    } 
end 
+0

+1,但爲什麼要銷燬「a」? b = a.map ...另外,它可能看起來更好:DateTime.new(* h.values_at('year','month','date','hour','minute')) – tokland

+0

@tokland :「煎餅」而不是「b」怎麼樣?我覺得他想替換它。如果我有一個數組中的鍵(然後我們會有一個雙啪!),或者如果我需要一個比'h'更長的變量名,我可能會用'values_at'去,但它沒有那麼大的區別這裏。 –

+0

我會去參加「紙杯蛋糕」,但是「煎餅」也不錯;-)我認爲,遵循FP原則 - 即使你用像Ruby這樣的語言付出一點內存/ CPU處罰 - 也是值得的。我認爲這是一個很好的教育方法,有些程序員還沒有聽說過FP,並且沒有很好的理由不斷更新變量。 – tokland