开发者

Calculate differences between array elements

Given a sorted array of n integers, like the following:

ary = [3, 5, 6, 9, 14]

I need to calculate th开发者_运维问答e difference between each element and the next element in the array. Using the example above, I would end up with:

[2, 1, 3, 5]

The beginning array may have 0, 1 or many elements in it, and the numbers I'll be handling will be much larger (I'll be using epoch timestamps). I've tried the following:

times = @messages.map{|m| m.created_at.to_i}
left  = times[1..times.length-1]
right = times[0..times.length-2]
differences = left.zip(right).map { |x| x[0]-x[1]}

But my solution above is both not optimal, and not ideal. Can anyone give me a hand?


>> ary = [3, 5, 6, 9, 14] #=> [3, 5, 6, 9, 14]
>> ary.each_cons(2).map { |a,b| b-a } #=> [2, 1, 3, 5]

Edit: Replaced inject with map.


Similar but more concise:

[3, 5, 6, 9, 14].each_cons(2).collect { |a,b| b-a }


An alternative:

a.map.with_index{ |v,i| (a[i+1] || 0) - v }[0..-2]

Does not work in Ruby 1.8 where map requires a block instead of returning an Enumerator.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜