首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在两个数组之间添加不平行的元素

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

Stack Overflow用户
提问于 2015-03-25 10:51:09
回答 3查看 46关注 0票数 1

我有一对数组,

代码语言:javascript
复制
array_1 = [1,2,3,4,5]
array_2 = [10,9,8,7,6]

我尝试从第二个数组的(n-1)个-th元素中减去一个数组的第n个元素,从第n个元素开始,得到一个数组:

代码语言:javascript
复制
[9-1, 8-2, 7-3, 6-4] = [8, 6, 4, 2]

我是以一种过程化的方式写的:

代码语言:javascript
复制
 array_1.pop
 array_2.shift
 [array_2,array_1].transpose.map { |a,b| a-b }

但我不希望改变数组。有没有一种方法或另一种方式来解决这个问题呢?

EN

回答 3

Stack Overflow用户

发布于 2015-03-25 11:28:50

另一种方式:

代码语言:javascript
复制
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]
票数 2
EN

Stack Overflow用户

发布于 2015-03-25 10:54:41

使用接收器的非破坏性dropzip,当接收器用完一个元素时,即使参数有更多元素,它也会停止。

代码语言:javascript
复制
array_2.drop(1).zip(array_1).map{|a, b| a - b}
票数 1
EN

Stack Overflow用户

发布于 2015-03-25 11:12:43

我认为您可能有点想多了;只要两个数组的长度相同,您就可以遍历您关心的索引,并通过index - offset引用另一个数组。

代码语言:javascript
复制
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设置为您喜欢的任何数字,并从这一点开始计算,因此即使数组非常大,您也不必生成任何中间数组,也不必执行任何不必要的工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29246616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档