Ruby:从2d数组中收集具有匹配元素的所有数组

Ruby:从2d数组中收集具有匹配元素的所有数组,ruby,multidimensional-array,Ruby,Multidimensional Array,我有一个2d数组,看起来像 array = [["apples", 11], ["oranges", 3], ["bananas", 7], ["oranges", 4], ["apples", 6], ["oranges", 9]] 我想以某种方式收集所有匹配的字符串,并对关联数组中的整数求和。 例如,我希望输出看起来像 totals_array = [["apples", 17], ["oranges", 16], ["bananas", 7]] 我在做这件事的方式上并不拘束,但想不出一

我有一个2d数组,看起来像

array = [["apples", 11], ["oranges", 3], ["bananas", 7], ["oranges", 4], ["apples", 6], ["oranges", 9]]
我想以某种方式收集所有匹配的字符串,并对关联数组中的整数求和。 例如,我希望输出看起来像

totals_array = [["apples", 17], ["oranges", 16], ["bananas", 7]]
我在做这件事的方式上并不拘束,但想不出一个简洁的方式。
任何帮助都将不胜感激

您可以执行以下操作:

array = [["apples", 11], ["oranges", 3], ["bananas", 7], ["oranges", 4], ["apples", 6], ["oranges", 9]]

totals_array = array.reduce(Hash.new(0)) { |h, s| h[s[0]] += s[1]; h }.to_a

我会:

array.group_by(&:first).map { |k,v| [k,v.map(&:last).inject(:+)] }
# => [["apples", 17], ["oranges", 16], ["bananas", 7]]
我想这样做:--


每个带有对象的对象
我喜欢这个…-)您是否希望
数组。每个_与_对象(Hash.new(0)){|(name,count),Hash | Hash[name]+=count}。到_a
?这正是我要找的。谢谢。@user70434随我去。。我的比较慢。。
array.group_by(&:first).map { |k,v| [k,v.map(&:last).inject(:+)] }
# => [["apples", 17], ["oranges", 16], ["bananas", 7]]
array.map{|a| [a[0], array.inject(0){|sum, e| e[0] == a[0] ? 
sum + e[1] : sum}]}.uniq
#=>[["apples", 17], ["oranges", 16], ["bananas", 7]]