[英]Ruby: collecting all arrays with matching elements from a 2d array
我有一個看起來像的二維數組
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
要么
totals_array = array.each_with_object(Hash.new(0)) { |(name,count),hash| hash[name] += count }.to_a
我會做:
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]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.