我想添加两个不同长度数组的值。
a =[1,2,3]
b= [1,2]
c = [1,2,3,4]
依旧......
我希望结果像[3,6,6,4]。如何在铁轨上的红宝石中做到这一点。
答案 0 :(得分:1)
为了让它变得动态,我会用a,b,c =>创建数组数组
a = [1, 2, 3]
b = [1, 2]
c = [1, 2, 3, 4]
arrays = [a, b, c]
然后我将检索最大尺寸:
max_size = arrays.map(&:size).max #=> 4
然后以下一行会给你答案:
max_size.times.map{ |i| arrays.reduce(0){|s, a| s + a.fetch(i, 0)}} #=> [3, 6, 6, 4]
答案 1 :(得分:0)
您可以构建一个包含所有这些数组的新数组,然后可以编写以下代码来获取包含每个数组条目的数组:
a = [1,2,3]
b = [1,2,3]
c = [1,2,3,4]
在应用其余代码之前,您需要确保每个数组具有相同的长度。为此,如果需要,可以在所有数组中附加0
,以确保每个数组的长度与其余数组的长度相同。
a = [1,2,3,0]
b = [1,2,3,0]
c = [1,2,3,4]
combined_array = [a,b,c]
result = combined_array.transpose.map { |a| a.reduce :+ }
答案 2 :(得分:0)
扩展@Arslan Ali的答案
我添加了一种方法来使所有数组的大小相同,以便可以应用他的求和方法:
a = [1,2,3]
b = [1,2,3]
c = [1,2,3,4]
arrays = [a, b, c]
size = [a, b, c].map{|a| a.size}.max # Compute maximum size
combined_array = [a,b,c].map{|a| a.fill(a.size...size){0}} # Fill arrays to maximum size
result = combined_array.transpose.map { |a| a.reduce :+ } # Sum everything
答案 3 :(得分:0)
以这种方式:
a = [1, 2, 3]
b = [1, 2, 3]
c = [1, 2, 3, 4]
[a,b,c].inject([]) do |totals, add|
add.each_with_index do |n, i|
totals[i] = (totals[i] || 0) + n
end
totals
end