संभालने मैं निम्नलिखित सरणी है:रूबी गणनीय रिवर्स का पता लगाने के
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' }
]
सरणी संभालने viewed_at
द्वारा आदेश दिया जाता है तो मैं विचारों में पिछली बार देखे जाने हैश पुनः प्राप्त करना चाहते हैं के लिए सरणी एक विशेष user_id, मैं निम्नलिखित कर सकता था:
views.reverse.detect { |view| view[:user_id] == 1 }
जहां पता पहले आइटम को एक गणना में वापस कर देगा जहां ब्लॉक सही साबित होता है।
मेरा प्रश्न है: मुझे लगता है कि रिवर्स विधि के लिए लागत है, तो मैं सरणी को उलट किए बिना रिवर्स में कैसे पता लगा सकता हूं? या रिवर्स विधि O(n)
नहीं है?
तुम सच में 'क्या है 17? –
जब आप विधियों को व्यवस्थित करते हैं, तो आप हमेशा गणनाकर्ताओं को चेन करना चाहते हैं। गणनाकर्ता श्रृंखला केवल ऑब्जेक्ट को फिर से सक्रिय करती है और ओ (एन) है। सबसे आम उदाहरण है "हैलो" .each_char.map {| x | x.succ} ' – texasbruce
@texasbruce: यह रूबी 2.0 के साथ पूरी तरह से सच होगा, जहां सभी प्रकार के आलसी संचालन संभव होंगे (अब बहुत सारे ऑपरेशन रिटर्न सरणी, गणनाकर्ता नहीं) – tokland