giả sử tôi có các mảng sau:của Ruby đếm ngược phát hiện
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' }
]
giả sử mảng được sắp xếp theo viewed_at
Nếu tôi muốn lấy lại băm xem cuối cùng trong xem mảng cho cụ thể user_id, tôi có thể làm như sau:
views.reverse.detect { |view| view[:user_id] == 1 }
trong đó phát hiện sẽ trả về mục đầu tiên trong một liệt kê trong đó khối đánh giá là đúng.
Câu hỏi của tôi là: Tôi giả sử có O(n)
chi phí cho phương thức đảo ngược, vậy làm thế nào tôi có thể phát hiện ngược lại mà không phải đảo ngược mảng? Hoặc là phương pháp đảo ngược không phải là O(n)
?
bạn có thực sự có '17: 77' như một thời điểm? –
Khi bạn kết chuỗi các phương thức, bạn luôn muốn nối chuỗi các điều tra viên. Chuỗi điều tra chỉ lặp lại đối tượng một lần và là O (n). Ví dụ phổ biến nhất là "hello" .each_char.map {| x | x.succ} ' – texasbruce
@texasbruce: điều đó sẽ hoàn toàn đúng với Ruby 2.0, nơi mà tất cả các loại hoạt động lười biếng sẽ có thể thực hiện được (bây giờ rất nhiều hoạt động trở lại mảng, không phải là điều tra viên) – tokland