找出数组的相邻元素之间的差异

时间:2013-11-05 10:20:34

标签: ruby

我只是想知道是否有一种好的方法(没有循环)来找到数组的相邻元素之间的差异:

[2, 8, 12] -> [6, 4]

a(n) = a(n+1) - a(n)

3 个答案:

答案 0 :(得分:11)

[2, 8, 12].each_cons(2).map{|a, b| b - a} # => [6, 4]

那仍然是几个周期,但你没有看到它们。

答案 1 :(得分:5)

a = [2, 8, 12]
a.map.with_index(1){|e,i| a[i]-e if a[i] }.compact # => [6, 4]

<强>基准

require 'benchmark'

a = (1..10000000).to_a

Benchmark.bm(10) do |b|
  b.report("each_cons") { a.each_cons(2).map{|a, b| b - a} }
  b.report("map_with_index") { a.map.with_index(1){|e,i| a[i]-e if a[i] }.compact }
end

<强>输出

                   user     system      total        real
each_cons       38.298000  0.156000  38.454000 ( 38.561856)
map_with_index  1.435000   0.000000   1.435000 (  1.428143)

答案 2 :(得分:1)

另一种方法。没有Arup那样快,但差不多:

a.zip(a.rotate).map{|x,y|y-x}.tap(&:pop)