On Nov 13, 9:16 am, Shai Rosenfeld <shaigui... / gmail.com> 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