2016-11-06 32 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"]} 
相关问题