At 2010-03-18 06:50PM, "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. Lots of verbose answers. It can be quite short: a = [['a',0],['b',15],['c',35],['d',100],['e',205],['f',215],['g',300]] a.group_by {|name,val| val/100} . collect do |key,list| list.collect {|name, time| name} end # => [["a", "b", "c"], ["d"], ["e", "f"], ["g"]] -- Glenn Jackman Write a wise saying and your name will live forever. -- Anonymous