Ruby on Rails - 收集具有相同特定值的哈希

3

给定一个哈希数组,每个哈希都类似于{"date":"date_value", "slots":[slots_value]},我想将具有相同日期的哈希收集到一个哈希中并合并插槽数组。

示例输入:

[{"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"]}
]
1个回答

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"]}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接