我有一对数组,
array_1 = [1,2,3,4,5]
array_2 = [10,9,8,7,6]我尝试从第二个数组的(n-1)个-th元素中减去一个数组的第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 }但我不希望改变数组。有没有一种方法或另一种方式来解决这个问题呢?
发布于 2015-03-25 11:28:50
另一种方式:
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]发布于 2015-03-25 10:54:41
使用接收器的非破坏性drop和zip,当接收器用完一个元素时,即使参数有更多元素,它也会停止。
array_2.drop(1).zip(array_1).map{|a, b| a - b}发布于 2015-03-25 11:12:43
我认为您可能有点想多了;只要两个数组的长度相同,您就可以遍历您关心的索引,并通过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设置为您喜欢的任何数字,并从这一点开始计算,因此即使数组非常大,您也不必生成任何中间数组,也不必执行任何不必要的工作。
https://stackoverflow.com/questions/29246616
复制相似问题