2016-11-06 6 views
3

すべてのハッシュが{"date":"date_value", "slots":[slots_value]}のようなハッシュの配列が与えられたら、同じハッシュで同じ日付のハッシュを集めて、スロット配列をマージしたいと思います。Ruby on Rails - 同じ特定の値を持つハッシュを集める

例入力:

[{"date" : "2016/23/12", "slots" : ["a","b"]}, 
{"date" : "2016/23/12", "slots" : ["c","d","e"]}, 
{"date" : "2016/24/12", "slots" : ["x"]} 
] 

出力例:

[{"date" : "2016/23/12", "slots" : ["a","b","c","d","e"]}, 
{"date" : "2016/24/12", "slots" : ["x"]} 
] 

答えて

3

Enumerable#group_byはハッシュと配列のための非常に強力なツールである:

input = [ 
    {"date" => "2016/23/12" , "slots" => ["a","b"]}, 
    {"date" => "2016/23/12", "slots" => ["c","d","e"]}, 
    {"date" => "2016/24/12", "slots" => ["x"]} 
] 

puts input.group_by{|h| h["date"]}.map{|date, hashes| 
    { 
    "date" => date, 
    "slots" => hashes.map{|h| h["slots"]}.flatten 
    } 
} 
#=> {"date"=>"2016/23/12", "slots"=>["a", "b", "c", "d", "e"]} 
# {"date"=>"2016/24/12", "slots"=>["x"]} 
関連する問題