如何在阵列中获取这些独特的元素并一起折叠?

Kit*_* Ho 0 ruby arrays

animals = [
  {type: "dog", a: 2},
  {type: "dog", b: 7},
  {type: "dog", c: 2},
  {type: "cat", d: 3},
  {type: "cat", e: 4},
  {type: "cat", f: 0},
  {type: "rabbit", g: 0},
  {type: "rabbit", h: 1}
]
Run Code Online (Sandbox Code Playgroud)

如何转换成

animals = [
  {type:"dog", a:2, b:7, c:2},
  {type:"cat", d:3, e:4, f:0},
  {type:"rabbit", g:0, h:1}
]
Run Code Online (Sandbox Code Playgroud)

我不知道如何以一种好的方式做到这一点.使用each和使用if else语句提取太笨拙了.有任何想法吗?

Aru*_*hit 6

我会这样做:

animals = [
  {type: "dog", a: 2},
  {type: "dog", b: 7},
  {type: "dog", c: 2},
  {type: "cat", d: 3},
  {type: "cat", e: 4},
  {type: "cat", f: 0},
  {type: "rabbit", g: 0},
  {type: "rabbit", h: 1}
]

array_of_merged_hash = animals.group_by do |inner_hash|
  inner_hash[:type]
end.map { |_,v| v.reduce(:merge) }

array_of_merged_hash
# => [{:type=>"dog", :a=>2, :b=>7, :c=>2},
#     {:type=>"cat", :d=>3, :e=>4, :f=>0},
#     {:type=>"rabbit", :g=>0, :h=>1}]
Run Code Online (Sandbox Code Playgroud)

方法是:group_by,reducemap.