我想在ruby中编写一个Array方法,它接受数组中的连续值,并将它们的差异作为一个新数组返回(在开头取消“0”)。
因此,将数组[4,7,11,16]输入方法会返回一个新数组[4,3,4,5]。
1)这种方法是否已经存在?
如果没有,那么我想我知道如何写它。然而,
2)是否已经存在一种方法,它允许我测试输入数组并确保它只包含整数和/或浮点数?
同样,如果没有,我想我知道如何写一个。
答案 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 }