在两个数组之间添加不平行元素

时间:2015-03-25 02:51:09

标签: ruby arrays

我有一对数组,

array_1 = [1,2,3,4,5]
array_2 = [10,9,8,7,6]

我试图从第二个数组的第(n-1)个元素中减去一个数组的第n个元素,从第n个元素开始,产生一个数组:

[9-1, 8-2, 7-3, 6-4] = [8, 6, 4, 2]

我是以程序方式写的:

 array_1.pop
 array_2.shift
 [array_2,array_1].transpose.map { |a,b| a-b }

但我不想改变阵列。是否有方法或其他方法可以解决这个问题?

3 个答案:

答案 0 :(得分:2)

另一种方式:

enum1 = array_1.to_enum
enum2 = array_2.to_enum
enum2.next
arr = []

loop do
  arr << enum2.next - enum1.next
end
arr
  #=> [8, 6, 4, 2]

答案 1 :(得分:1)

使用非破坏性drop作为接收者,zip,当接收者用完一个元素时将停止,即使参数有更多。

array_2.drop(1).zip(array_1).map{|a, b| a - b}

答案 2 :(得分:1)

我想你可能会过度思考它;只要两个数组的长度相同,您就可以遍历您关注的索引,并通过index - offset引用另一个数组。

array_1 = [1,2,3,4,5]
array_2 = [10,9,8,7,6]
n = 1
(n...array_1.length).map {|i| array_2[i] - array_1[i - 1] }

您可以将n设置为您喜欢的任何数字并从该点开始计算,因此即使数组非常大,您也不必生成任何中间数组,并且您不必执行任何不必要的工作。