0

それぞれが多数の配列要素を持つ2つの配列があります。各配列要素の最初の要素を識別子として使用し、2 番目の要素を追加して、これら 2 つの要素を追加します。

a1= [ [0,1], [1,5], [7,3] ]
a2= [ [0,3], [3,2], [1,7] ]

結果として、私は(入力配列がソートされていない可能性があることに注意してください):

[ [0,4], [1,12], [3,2], [7,3] ]

そして結果はソートされるべきです。

4

2 に答える 2

6

次のように実行できます。

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

まず、配列を + でまとめます。これは、a と b は気にせず、それらの要素だけを気にするためです。次に、group_by は結合された配列を最初の要素で分割し、内部配列を簡単に操作できるようにします。次に、内側の配列の 2 番目 (または最後) の要素を 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]]
于 2013-07-29T14:26:43.203 に答える