From: Dale Martenson Date: 2007-11-14T00:45:10+09:00 Subject: Re: array ordering / selection according to elements - On Nov 13, 9:16 am, Shai Rosenfeld wrote: > given that time1 < time2 < time3 < time4 ... (and are all Time objects) > > myarray= [ time1, time2, time3, time4, time5 , time6 , time7 , .. ] > > special_sort(time4)= [ time3, time4, time5 ] > > ..basically, passing an arg of a certain obj in the array to a > "special_sort" func, how do i collect the "nearest" ones to it? thx for > any suggestions > -- > Posted viahttp://www.ruby-forum.com/. You could do something like this. It only would work for exact matches. --Dale Martenson class Array def predecessor(index) return nil if index == 0 self[index-1] end def successor(index) return nil if index > (self.length-1) self[index+1] end def near(value) return nil unless index = self.index(value) [ self.predecessor(index), self[index], successor(index) ] end end a = [1, 2, 3, 4, 6, 7, 8, 9] puts a.near(0).inspect # not found puts a.near(1).inspect puts a.near(2).inspect puts a.near(3).inspect puts a.near(4).inspect puts a.near(5).inspect # not found puts a.near(6).inspect puts a.near(7).inspect puts a.near(8).inspect puts a.near(9).inspect puts a.near(10).inspect # not found