我有一个看起来像
的二维数组array = [["apples", 11], ["oranges", 3], ["bananas", 7], ["oranges", 4], ["apples", 6], ["oranges", 9]]
我想以某种方式收集所有匹配的字符串并对相关数组中的整数求和。 例如,我希望输出看起来像
totals_array = [["apples", 17], ["oranges", 16], ["bananas", 7]]
我并没有以某种方式做到这一点,但却无法想出一个巧妙的方法来做到这一点。 任何帮助,将不胜感激。
答案 0 :(得分:4)
你可以这样做:
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
或
totals_array = array.each_with_object(Hash.new(0)) { |(name,count),hash| hash[name] += count }.to_a
答案 1 :(得分:3)
我会这样做:
array.group_by(&:first).map { |k,v| [k,v.map(&:last).inject(:+)] }
# => [["apples", 17], ["oranges", 16], ["bananas", 7]]
答案 2 :(得分:-1)
我想这样做: -
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]]