我有一对数组,
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 }
但我不想改变阵列。是否有方法或其他方法可以解决这个问题?
答案 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
设置为您喜欢的任何数字并从该点开始计算,因此即使数组非常大,您也不必生成任何中间数组,并且您不必执行任何不必要的工作。