获取数组中值之间的差异

时间:2014-09-07 15:50:27

标签: ruby arrays

我想在ruby中编写一个Array方法,它接受数组中的连续值,并将它们的差异作为一个新数组返回(在开头取消“0”)。

因此,将数组[4,7,11,16]输入方法会返回一个新数组[4,3,4,5]。

1)这种方法是否已经存在?

如果没有,那么我想我知道如何写它。然而,

2)是否已经存在一种方法,它允许我测试输入数组并确保它只包含整数和/或浮点数?

同样,如果没有,我想我知道如何写一个。

3 个答案:

答案 0 :(得分:3)

p [4,7,11,16].unshift(0).each_cons(2).map{|a,b| b-a} # => [4, 3, 4, 5]

答案 1 :(得分:2)

保持简单:

arr = [4,7,11,16]

last = 0
arr.map { |e| new=e-last; last=e; new }
  #=> [4, 3, 4, 5]

另一种方式:

a = [arr.first]
enum = arr.each
loop do
  a << -enum.next + enum.peek
end
a
  #=> [4, 3, 4, 5]
StopIteration位于其最后一个元素时,

Enumerator#peek会引发enum异常。 Kernel#loop通过断开循环来处理异常。

答案 2 :(得分:0)

关于第一种方法,我不知道Ruby Array类中有任何这样的方法。

关于第二个问题,您可以按照in this answer解释:

your_array.all? {|i| i.is_a? Numeric }