在Ruby中计算导数([i] - [i - 1])

4

使用for循环或each_with_index都很简单,只是想知道是否有更好的方法使用Ruby语法完成它。

我需要创建一个新的数组,这个数组是源数组的导数,例如:

for(int i = 1; i < oldArray.length; i++)
{
    newArray[i] = oldArray[i] - oldArray[i-1]
}

嘿,不要在我还没来得及输入我的答案之前就选出获胜者,这不公平 :-P - Avdi
2个回答

8
old_array.each_cons(2).map{|x, y| y - x}

使用块大小为2调用没有块的Enumerable#each_cons将返回一个枚举器,该枚举器将迭代old_array中每一对连续元素。然后我们只需使用map对每对执行减法即可。

我刚刚在 [1,2,3,4] 上运行它,结果得到了 [1,1,1]。 - Avdi
你确定你不是在想每个切片(each_slice)吗?那样会得到[1,1]。 - Avdi
2
代码需要1.8.7版本才能运行。然而,你可以将其写成"old_array.enum_cons(2).map{|x, y| y - x}"的形式,这样它也可以在之前的版本上运行。 - newacct

1
last=0
new = old.map{|v|x=v-last;last=v;x}[1..-1]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接