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语句提取太笨拙了.有任何想法吗?
我会这样做:
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)