如何添加具有不同长度的数组的值

时间:2016-03-22 09:47:39

标签: arrays ruby

我想添加两个不同长度数组的值。

a =[1,2,3]
b= [1,2]
c = [1,2,3,4]

依旧......

我希望结果像[3,6,6,4]。如何在铁轨上的红宝石中做到这一点。

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