2010-02-27 15 views
36

मैं नीचे समाधान के साथ आया था, लेकिन मुझे विश्वास है कि अच्छे होना चाहिए एक वहाँ बाहर ...अंतिम तत्व से शुरू होने वाली सरणी के माध्यम से पुनरावृत्ति कैसे करें? (रूबी)

array = [ 'first','middle','last'] 

index = array.length 
array.length.times { index -= 1; puts array[index]} 

उत्तर

45
array.reverse.each { |x| puts x } 
+0

मुझे पता था कि वहाँ कुछ होगा 'nice' ... धन्यवाद। – Radek

+55

असल में, 'रिवर्स_चैच' बेहतर है क्योंकि यह सरणी की एक प्रति 'रिवर्स' के रूप में नहीं बनाता है। –

+2

हां, मैं यह भी उम्मीद करूंगा कि 'रिवर्स_च' बेहतर है, हालांकि मैंने खुद को देखने के लिए आंतरिक में खोला नहीं है। –

83

रूबी चालाक है

a = [ "a", "b", "c" ] 
a.reverse_each {|x| print x, " " } 
4

तुम भी पाश के लिए एक का उपयोग कर सकते

array = [ 'first','middle','last'] 
for each in array.reverse do 
    print array 
end 

प्रिंट होगा

last 
middle 
first 
0

एक जेड टेम्पलेट में आप उपयोग कर सकते हैं:

for item in array.reverse() 
    item 
3

मामले में आप रिवर्स में एक सीमा के माध्यम से पुनरावृति करने के लिए तो उपयोग करना चाहते हैं:

(0..5).reverse_each do |i| 
    # do something 
end 
+0

क्या 'reverse_each' आंतरिक रूप से एक रिवर्स ऑपरेशन करता है? या यह सिर्फ अंत में शुरू होता है और पीछे की ओर काम करता है? यदि उत्तरार्द्ध, यह उत्तर पहले कॉलिंग '# रिवर्स' और फिर 'प्रत्येक' अलग से बेहतर समय जटिलता प्राप्त कर सकता है, क्योंकि '# रिवर्स' अनिवार्य रूप से ओ (एन लॉग एन) का एक प्रकार का ऑपरेशन है जबकि अंतिम से पहले की गणना करना है समय जटिलता के मामले में '# प्रत्येक' के समान (यानी ओ (एन))। –

0

आप का उपयोग किए बिना एक ही लक्ष्य को हासिल करना चाहते हैं रिवर्स [कभी-कभी यह प्रश्न साक्षात्कार में आता है]। हमें मूल तर्क का उपयोग करने की आवश्यकता है।

  1. सरणी सूचकांक
  2. के माध्यम से पहुँचा जा सकता है सरणी की लंबाई के सूचकांक सेट और फिर 1 से decrements तक सूचकांक तक पहुँच जाता है 0
  3. उत्पादन स्क्रीन करने के लिए या एक नई सरणी या पाश का उपयोग किसी भी तर्क प्रदर्शन करने के लिए ।

    def reverseArray(input) 
         output = [] 
         index = input.length - 1 #since 0 based index and iterating from 
         last to first 
    
         loop do 
         output << input[index] 
         index -= 1 
         break if index < 0 
         end 
    
         output 
        end 
    
        array = ["first","middle","last"] 
    
        reverseArray array #outputs: ["last","middle","first"] 
    
संबंधित मुद्दे