Ruby перечислимое обратное обнаружение

предполагая, что у меня есть следующий массив:

views = [
  { :user_id => 1, :viewed_at => '2012-06-29 17:03:28 -0400' },
  { :user_id => 1, :viewed_at => '2012-06-29 17:04:28 -0400' },
  { :user_id => 2, :viewed_at => '2012-06-29 17:05:28 -0400' },
  { :user_id => 3, :viewed_at => '2012-06-29 17:06:28 -0400' },
  { :user_id => 1, :viewed_at => '2012-06-29 17:07:28 -0400' },
  { :user_id => 1, :viewed_at => '2012-06-29 17:08:28 -0400' },
  { :user_id => 3, :viewed_at => '2012-06-29 17:09:28 -0400' },
  { :user_id => 3, :viewed_at => '2012-06-29 17:16:28 -0400' },
  { :user_id => 3, :viewed_at => '2012-06-29 17:26:28 -0400' },
  { :user_id => 3, :viewed_at => '2012-06-29 17:36:28 -0400' },
  { :user_id => 1, :viewed_at => '2012-06-29 17:47:28 -0400' },
  { :user_id => 2, :viewed_at => '2012-06-29 17:57:28 -0400' },
  { :user_id => 3, :viewed_at => '2012-06-29 17:67:28 -0400' },
  { :user_id => 1, :viewed_at => '2012-06-29 17:77:28 -0400' }
]

предполагая, что массив упорядочен по просмотрен _в

Если я хочу получить хэш последнего представления в массиве views для определенного пользователя _id ,Я мог бы сделать следующее:

views.reverse.detect { |view| view[:user_id] == 1 }

где обнаружение вернет первый элемент в перечислимом, где блок оценивается как истинный.

Мой вопрос: :Я предполагаю, что метод реверса требует O(n)затрат, так как же я могу обнаружить в обратном направлении без необходимости реверсирования массива? Или метод обратный не O(n)?

8
задан Patrick Klingemann 29 June 2012 в 21:23
поделиться