Arrays 在两个不同长度的数组中添加相应的元素

Arrays 在两个不同长度的数组中添加相应的元素,arrays,ruby,Arrays,Ruby,我有两个阵列: a = [50, 17, 54, 26] b = [19, 7, 8, 18, 36, 8, 18, 36, 18, 14] 我想在b的元素中添加a的相应元素。当a的元素用完时,我想在a中循环以提供元素。结果应该是: c = [69, 24, 62, 44, 86, 25, 72, 62, 68, 31] 我怎样才能做到这一点呢?编辑:仅适用于rails def add_arrays(array_a, array_b) results = [] array_b.in_

我有两个阵列:

a = [50, 17, 54, 26]
b = [19, 7, 8, 18, 36, 8, 18, 36, 18, 14]
我想在b的元素中添加a的相应元素。当a的元素用完时,我想在a中循环以提供元素。结果应该是:

c = [69, 24, 62, 44, 86, 25, 72, 62, 68, 31]

我怎样才能做到这一点呢?

编辑:仅适用于rails

def add_arrays(array_a, array_b)
  results = []
  array_b.in_groups_of(4).each do |group|
    group.each_with_index do |record, j|
      results << (record + array_a[j])
    end
  end
  results
end

未对其进行测试,但这应该可以做到编辑:仅适用于rails

def add_arrays(array_a, array_b)
  results = []
  array_b.in_groups_of(4).each do |group|
    group.each_with_index do |record, j|
      results << (record + array_a[j])
    end
  end
  results
end
b.zip(a * (b.size / a.size + 1)).map { |o| o.reduce(:+) }
#⇒ [69, 24, 62, 44, 86, 25, 72, 62, 68, 31]
没有测试过,但应该可以

b.zip(a * (b.size / a.size + 1)).map { |o| o.reduce(:+) }
#⇒ [69, 24, 62, 44, 86, 25, 72, 62, 68, 31]
或者,从@SimpleLime中可以得到更好、更简洁的信息:

b.zip(a.cycle).map(&:sum)
或者,从@SimpleLime中可以得到更好、更简洁的信息:

b.zip(a.cycle).map(&:sum)
另一个,使用和模:

b.map.with_index { |e, i| e + a[i % a.size] }
#=> [69, 24, 62, 44, 86, 25, 72, 62, 68, 31]
另一个,使用和模:

b.map.with_index { |e, i| e + a[i % a.size] }
#=> [69, 24, 62, 44, 86, 25, 72, 62, 68, 31]


我刚刚写了一些非常接近的东西:b.zipa.cycle.map&:sum@SimpleLime是的,你的方式更干净,我已经更新了答案。我总是忘记这些现代的助手,比如循环和求和:现在我甚至理解了这个问题。cycle的解决方案很好。@SimpleTime如果你发布了答案,我想没有人会对此感到惊讶。我只是写了一些非常接近的东西:b.zipa.cycle.map&:sum@SimpleLime是的,你的方式更干净,我已经更新了答案。我总是忘记这些现代的助手,比如循环和求和:现在我甚至理解了这个问题。很好的循环解决方案。@SimpleLime我想如果你把答案贴出来的话,没有人会对你大惊小怪。一组一组?!用红宝石?我怀疑。@mudasobwa这是您最喜欢的rails方法,我知道,尽管它不属于这里,因为没有rails标记。它与实际使用它的每个_切片类似,但允许您为大小不正确的切片指定填充符,例如[1,2,3]。在_组中_of 2.to_a=>[[1,2],[3,nil]]@enginersmnky mine,tbh:对注释稍微吹毛求疵:b.each.with_index.map不需要:b.map.with_index在b组中做同样的事情?!用红宝石?我怀疑。@mudasobwa这是您最喜欢的rails方法,我知道,尽管它不属于这里,因为没有rails标记。它与实际使用它的每个_切片类似,但允许您为大小不正确的切片指定填充符,例如[1,2,3]。在_组中[u of 2.to_a=>[[1,2],[3,nil]@engineersmnky mine,tbh:只是对注释进行一点挑剔:不需要b.each.with_index.map中的each:b.map.with_index做同样的事情您的意思是将一个数组中的元素添加到另一个数组中,而不是将一个数组中的元素添加到另一个数组中。您编写的内容听起来像是要连接数组。您的意思是将一个数组中的元素添加到另一个数组中,而不是将一个数组中的元素添加到另一个数组中。你所写的听起来像是要连接数组。显然,这一个是隐藏在折叠下面的注释中。穆达索布瓦的功劳。显然,这是隐藏在折叠下面的评论。学分归mudasobwa所有。或者,不带局部变量:b.each_with_objecta.cycle.map{e,enum | enum.next+e}.Like。或者,不带局部变量:b.each_with_objecta.cycle.map{e,enum | enum.next+e}。