簡體   English   中英

Ruby:從2d數組中收集具有匹配元素的所有數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM