簡體   English   中英

在ruby中的“鍵”上合並或求和2個數組

[英]Merge or sum 2 arrays on “keys” in ruby

這是數組版本: Sum 2哈希屬性具有相同的鍵

我有2個數組,例如:

a = [[1,10],[2,20],[3,30]]
b = [[1,50],[3,70]]

如何在每個第一個值(如果存在)上求和得到:

c = [[1,60],[2,20],[3,100]]

你可以這樣做:

(a + b).group_by(&:first).map { |k, v| [k, v.map(&:last).inject(:+)] }

首先,你將數組與+放在一起,因為你不關心ab ,你只關心它們的元素。 然后group_by通過第一個元素對組合數組進行分區,以便可以輕松處理內部數組。 然后你只需要用v.map(&:last)內部數組的第二個(或最后一個)元素,然后用inject(:+)求和它們。

例如:

>> a = [[1,10],[2,20],[3,30]]
>> b = [[1,50],[3,70]]
>> (a + b).group_by(&:first).map { |k,v| [k, v.map(&:last).inject(:+)] }
=> [[1, 60], [2, 20], [3, 100]]

您也可以使用哈希方式

Hash[a].merge(Hash[b]){|k,a,b|a+b}.to_a

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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