懲りずにご提案。

    ##
    ##  次の要素/前の要素を返す。
    ##
    ##  次の場合には nil が返る:
    ##(1)引数で指定した要素がない場合、
    ##(2)最後の次を捜した場合、最初の前を捜した場合、
    ##(3)次/前が nil の場合
    ## あらかじめ compact で nil 要素を取り除いておくと良い。
    ##
    ## 引数で指定した要素が配列に複数ある場合には最初のものを基準にする。
    ## あらかじめ、uniq で重複を取り除いたもので実行するのがよい。
    ##
    ## ループにしたければ 
    ##  next_item = array.next_of(item) || array.first
    ##  prev_item = array.prev_of(item) || array.last
    ##
    ##  array[ array.index(item)+1 ]  では undefined method `+' for nil
	##
class Array
  def next_of( item , n=1 )
    return nil unless index = self.index(item)
    return self[ index+n ]
  end
  def prev_of( item , n=-1)
    return self.next_of( item , n )
  end
end    

たけ(tk) ggb03124 / nifty.ne.jp
http://member.nifty.ne.jp/take_tk