這是另一種方式。
[a,b].transpose.map(&:transpose).map { |(e,_),arr| [e, arr.reduce(:-)] }
#=> [[9, -481.59000000000015], [8, 959.8600000000006], [7, -385.0],
# [6, -2131.3899999999994], [5, 726.7800000000007], [4, 2842.539999999999],
# [3, -1911.8400000000001]]
步驟如下。
c = [a,b].transpose
#=> [[[9, 2336.02], [9, 2817.61]], [[8, 7993.6], [8, 7033.74]],
# [[7, 5265.73], [7, 5650.73]], [[6, 7075.33], [6, 9206.72]],
# [[5, 9281.02], [5, 8554.24]], [[4, 9524.64], [4, 6682.1]],
# [[3, 300], [3, 2211.84]]]
d = c.map(&:transpose)
#=> [[[9, 9], [2336.02, 2817.61]], [[8, 8], [7993.6, 7033.74]],
# [[7, 7], [5265.73, 5650.73]], [[6, 6], [7075.33, 9206.72]],
# [[5, 5], [9281.02, 8554.24]], [[4, 4], [9524.64, 6682.1]],
# [[3, 3], [300, 2211.84]]]
d.map { |(e,_),arr| [e, arr.reduce(:-)] }
#=> [[9, -481.59000000000015], [8, 959.8600000000006], [7, -385.0],
# [6, -2131.3899999999994], [5, 726.7800000000007], [4, 2842.539999999999],
# [3, -1911.8400000000001]]
讓我們仔細檢查最後的計算。
enum = d.map
#=> #<Enumerator: [[[9, 9], [2336.02, 2817.61]], [[8, 8], [7993.6, 7033.74]],
# [[7, 7], [5265.73, 5650.73]], [[6, 6], [7075.33, 9206.72]],
# [[5, 5], [9281.02, 8554.24]], [[4, 4], [9524.64, 6682.1]],
# [[3, 3], [300, 2211.84]]]:map>
由枚舉器生成的第一個元素傳遞給塊並分配給塊變量。
(e,_),arr = enum.next
#=> [[9, 9], [2336.02, 2817.61]]
e #=> 9
_ #=> 9
arr
#=> [2336.02, 2817.61]
arr.reduce(:-)
#=> -481.59000000000015
因此返回數組[9, -481.59000000000015]
。
其餘的計算是相似的。
@jordan,你是正確的遺憾。這是一個漫長的一天 – SupremeA
你的意思是從'a'中減去數組'b'中的數量以與'c'一致。 –
這兩個月的數組總是有相同的索引? – Stefan