From: Roger Braun Date: 2010-03-19T12:16:30+09:00 Subject: Re: Grouping elements of an array Hi On Thu, Mar 18, 2010 at 11:50 PM, Steve Wilhelm wrote: > I have an array of records that contain timestamps at random intervals. > The records are ordered by timestamp. > > I would like to convert the array into an array of arrays; each subarray > would contain "grouped records." Grouping would occur if the timestamp > of the next element in the original array is within thirty seconds of > the current element. > > Example (second column is timestamp in seconds starting from zero). > > A 0 > B 15 > C 35 > D 100 > E 205 > F 215 > G 300 > > would result in > > [[A, B, C], [D], [E, F], [G]] > > Any help on how to do this in the "Ruby Way" would be appreciated. How about this: 1 arr = [0,15,35,100,205,300] 2 arr2 = [0, 20, 40] 3 4 def group(array) 5 array.map!{|e| [e]} 6 array.inject([]) do |r, e| 7 if r == [] or e[0] - r.last.last > 30 then 8 r.push(e) 9 else 10 r[-1].push(e[0]) 11 end 12 r 13 end 14 end 15 16 puts arr.inspect 17 puts group(arr).inspect 18 puts arr2.inspect 19 puts group(arr2).inspect -- Roger Braun http://yononaka.de roger.braun@student.uni-tuebingen.de