2012-05-01 14 views

उत्तर

34

एक और, संभावित रूप से अधिक प्रत्यक्ष और पठनीय संभावना Array#drop का उपयोग करना है:

a.drop(3).each do |i| 
    # do something with item i 
end 

अब यह वास्तव में चमकता है अगर Enumerable से विरासत में प्राप्त अन्य विधियों के साथ संयुक्त हो, तो संभावना है कि आपके अनिवार्य each पाश के लिए बेहतर विकल्प हो।

a = [0,1,2,3,4,5,6,7] 
a.drop(3).select(&:even?).map { |x| x * 2 } 
# => [8, 12] 

या कहते हैं कि तुम सब मानों की सूची प्रिंट करना चाहते हैं:

a = ["1", "2", "3", "4", "5"] 
puts a.drop(3).join("\n") 

आउटपुट:

4 
5 

ये आप निकाले टुकड़ा को फ़िल्टर और बाद में बदलना चाहते हैं कहो कार्यात्मक प्रोग्रामिंग से विरासत में मिली विशेषताएं रूबी को इतनी मजबूत बनाती हैं :)

+0

कौन सी कार्यात्मक प्रोग्रामिंग भाषाओं ने प्रोग्रामिंग की इस शैली को प्रभावित किया? – Vass

+1

@Vass इन LISP और बाद में हास्केल जो लगातार एकल लिंक्ड सूचियों पर भरोसा करते हैं, यह शैली बहुत आम है (उदाहरण के लिए आप शास्त्रीय कार्य 'मानचित्र', 'फ़िल्टर',' टेक', 'ड्रॉप', 'ज़िप' इत्यादि। आपको रूबी के 'एन्यूमेबल' मॉड्यूल में भी मिलते हैं) –

+0

बाइनरी सर्च या कुछ अन्य सॉर्टिंग एल्गोरिदम – Donato

19

सरणी के एक subpart पर उपयोग each। नीचे दिए गए उदाहरण में, चौथा तत्व से समाप्त करने के लिए:

a[3..-1].each do |i| 
    #some stuff 
end 
+0

a [a.size - 1] .each do | i | – JohnMerlino

4

यह तुम्हारी मदद करेगा

a[3..-1].each do |i| 
    #your logic 
end 
3

अधिकांश Rubyist के बारे में पाश के लिए अच्छे पुराने भूल:

n = 3 
for i in n...a.size 
    puts a[i] 
end 
+4

क्योंकि यह बेकार है, क्योंकि यह एक नया दायरा पेश नहीं करता है, जो प्रति-अंतर्ज्ञानी है क्योंकि यह 'डू/एंड' का उपयोग करता है। इसके अलावा, ओपी इंडेक्स नहीं, सरणी वस्तुओं की गणना करना चाहता था। –

+0

हू? प्रत्येक भी डू/एंड का उपयोग करता है? यदि आप एक नया दायरा चाहते हैं, तो प्रो क्लोजर का उपयोग न करें, लूप के अंदर एक विधि कॉल का उपयोग करें। यदि उनके कोड ब्लॉक के लिए प्रत्येक के बीच एक प्रिंसिपल अंतर है, तो मैं इसे जानना चाहता हूं (मैं लूप के लिए भी उपयोग करता हूं :) –

+1

वैसे भी, मैंने कोड के बजाय [i] जोड़ा है, धन्यवाद। –

संबंधित मुद्दे