我有一個數組,其元素是不同大小的陣列,說:總和不同大小的數組的
[[45, 96, 0.0, 96, 96, 96, 0.0], [04, 55, 06, 55, 04, 04, 02, 55]]
我想找到兩個數組的總和,即
[49, 151, ...]
我有一個數組,其元素是不同大小的陣列,說:總和不同大小的數組的
[[45, 96, 0.0, 96, 96, 96, 0.0], [04, 55, 06, 55, 04, 04, 02, 55]]
我想找到兩個數組的總和,即
[49, 151, ...]
不是很漂亮,但工程:
>> a = [[45, 96, 0.0, 96, 96, 96, 0.0], [04, 55, 06, 55, 04, 04, 02, 55]]
=> [[45, 96, 0.0, 96, 96, 96, 0.0], [4, 55, 6, 55, 4, 4, 2, 55]]
>> sorted_a = a.sort_by(&:size).reverse
=> [[4, 55, 6, 55, 4, 4, 2, 55], [45, 96, 0.0, 96, 96, 96, 0.0]]
>> zipped_a = sorted_a.first.zip(sorted_a.last)
=> [[4, 45], [55, 96], [6, 0.0], [55, 96], [4, 96], [4, 96], [2, 0.0], [55, nil]]
>> zipped_a.map{ |arr| arr.map{ |v| v || 0 } }.map(&:sum)
=> [49, 151, 6.0, 151, 100, 100, 2.0, 55]
首先,你必須開始爲最長至zip
正常工作數組排序。然後,壓縮將在較短陣列的冗餘值中創建nil
值。因此,下一步是將這些nil
s替換爲零(使用嵌套的map
),最後您可以使用sum
的值。
你可以試試這個方法也
k =[]
for i in 0..ar.max_by(&:size).length-1 do
k << ar.map { |x| [x[i]] }
end
k.map(&:flatten).map{|a| a.compact.sum}
=> [49, 151, 6.0, 151, 100, 100, 2.0, 55]
a = [[45, 96, 0, 96, 96, 96, 0],
[ 4, 55, 6, 55, 4, 4, 2, 55]]
Array.new(a.max_by(&:size).size) { |i| a.reduce(0) { |t,e| t+e[i].to_i } }
#=>[49, 151, 6, 151, 100, 100, 2, 55]
注意nil.to_i #=> 0
(ref)。
又如:
a = [[1], [2,3,4], [5,6]]
Array.new(a.max_by(&:size).size) { |i| a.reduce(0) { |t,e| t+e[i].to_i } }
#=> [8,9,4]
好;你是否試圖自己解決這個問題?如果是這樣,你究竟在哪裏卡住?總的來說,人們對「請爲我製作這些代碼」 - 請求(看起來像這樣)做出的反應不是很好,但是**做得很好**「我試過這個,現在我被卡住了,請幫助「 - 請求;-) – Carpetsmoker
@Carpetsmoker:現在我知道了這件事。我不知道爲什麼其他人投下了一個問題? –