2010-02-21 30 views
9

tôi đang gặp khó khăn để tìm ra cách thanh lịch để thêm một mảng bămTổng hợp các giá trị của một mảng băm trong Ruby

[{:a=>1,:b=>2,:c=>3},{:a=>1,:b=>2,:c=>3},{:a=>1,:b=>2,:c=>3}] 

nên trở

[{:a=>3,:b=>6,:c=>9}] 

Tôi biết nó có lẽ sẽ liên quan ánh xạ/giảm, nhưng tôi không thể tìm ra cú pháp đúng, không giúp ích cho ruby-doc dot org không khớp với phiên bản của tôi

Tôi đang sử dụng 1.8.7

Trả lời

10
array.inject{|x,y| x.merge(y){|_,a,b| a + b}} 

(xác minh trên của Ruby 1.8.7)

+0

này là khá mát mẻ, mặc dù tôi không biết lý do tại sao việc hợp nhất hoạt động mà không tiêm một băm rỗng ... – hurikhan77

+0

@ hurikhan77 các bơm đầu tiên diễn ra khởi tạo với mục đầu tiên của mảng - không phải với phần tử trống. – Peter

+1

@Peter dấu gạch dưới làm gì khi tham số khối đầu tiên cho hợp nhất? –

Các vấn đề liên quan