From: Rick DeNatale Date: 2009-07-29T21:51:23+09:00 Subject: Re: previous value in array block On Wed, Jul 29, 2009 at 8:11 AM, Robert Dober wrote: > On Wed, Jul 29, 2009 at 10:50 AM, Xavier Noria wrote: >> each_cons seems natural here: >> >> require 'enumerator' >> >> a = [1, 3, 3, 2] >> b = a[0, 1] >> >> a.each_cons(2) { |x, y| b << y - x } > and purely functional > ( [0] + a ).each_cons( 2 ).map{ |x,y| y -x } Here's a lisp/scheme inspired approach using inject and with an array serving as a "cons cell" and first => car and last => cdr: [1, 3, 3, 2].inject([0, []]) { |memo, elem| [elem, memo.last << (elem - memo.first)] }.last # => [1, 2, 0, -1] -- Rick DeNatale Blog: http://talklikeaduck.denhaven2.com/ Twitter: http://twitter.com/RickDeNatale WWR: http://www.workingwithrails.com/person/9021-rick-denatale LinkedIn: http://www.linkedin.com/in/rickdenatale