2011-01-04 11 views
5

मैं भूल जाता हूं कि रूबी में लूप की स्थिति का ट्रैक कैसे रखें। आम तौर पर मैं जावास्क्रिप्ट, AS3, जावा, आदि में लिखनेरूबी, ब्लॉक, के लिए काउंटर वैरिएबल का ट्रैक कैसे रखें, प्रत्येक के लिए

each:

counter = 0 
Word.each do |word,x| 
    counter += 1 
    #do stuff 
end 

for:

एक ही बात

while:

एक ही बात

block

Word.each {|w,x| } 

यह मुझे वास्तव में नहीं पता है।

+0

आपका प्रश्न क्या है? मैं समझ नहीं पा रहा हूं कि आप क्या पूछ रहे हैं। –

+0

आह, मुझे पता था कि यह अस्पष्ट था। काउंटर वैरिएबल का ट्रैक कैसे रखें। – s84

उत्तर

8

रुबी 1.8 की Array#each_with_index विधि के अतिरिक्त, रुबी 1.9 में कई गणना विधियां ब्लॉक के बिना बुलाए जाने पर एक गणनाकर्ता लौटाती हैं; आप तो प्रगणक भी सूचकांक साथ भेज देते है की with_index विधि कॉल कर सकते हैं:

irb(main):001:0> a = *('a'..'g') 
#=> ["a", "b", "c", "d", "e", "f", "g"] 

irb(main):002:0> a.map 
#=> #<Enumerator:0x28bfbc0> 

irb(main):003:0> a.select 
#=> #<Enumerator:0x28cfbe0> 

irb(main):004:0> a.select.with_index{ |c,i| i%2==0 } 
#=> ["a", "c", "e", "g"] 

irb(main):005:0> Hash[ a.map.with_index{ |c,i| [c,i] } ] 
#=> {"a"=>0, "b"=>1, "c"=>2, "d"=>3, "e"=>4, "f"=>5, "g"=>6} 

आप map.with_index या select.with_index (या की तरह) रूबी 1.8.x के तहत आप इस उबाऊ-लेकिन- कर सकते हैं या तो चाहते हैं तेजी से विधि:

i = 0 
a.select do |c| 
    result = i%2==0 
    i += 1 
    result 
end 

या आप अधिक कार्यात्मक मजा कर सकते हैं:

a.zip((0...a.length).to_a).select do |c,i| 
    i%2 == 0 
end.map{ |c,i| c } 
5

यदि आप का उपयोग each के बजाय करते हैं, तो आपको तत्व के साथ एक अनुक्रमणिका मिल जाएगी। तो अगर आप कर सकते हैं: आप अभी भी काउंटर खुद का ट्रैक रखने करना होगा

Word.each_with_index do |(word,x), counter| 
    #do stuff 
end 

लिए while छोरों।

+0

हाँ यह वही है जो मैं देख रहा हूं लेकिन उनमें से एक बड़ी तस्वीर है। – s84

+1

@ सैम: मुझे यकीन नहीं है कि आप किस प्रकार की बड़ी तस्वीर का मतलब है। – sepp2k

+0

लॉल, मुझे लगता है मुझे याद नहीं है। मुझे लगता है कि मेरा मतलब जावास्क्रिप्ट में जैसा है, आप लूप में काउंटर को प्रारंभ कर सकते हैं लेकिन रूबी में यह सहज नहीं लगता है क्योंकि काउंटर बस वहां होना चाहिए। नहीं? – s84

3

एक राजधानी डब्ल्यू इसका मतलब होगा एक निरंतर जो सबसे अधिक संभावना मतलब यह है एक वर्ग या मॉड्यूल एक वर्ग का उदाहरण नहीं है। मुझे लगता है कि आप कक्षा का उपयोग करके प्रत्येक का उपयोग करके एक गणना कर सकते हैं लेकिन यह बहुत विचित्र लगता है।

उलझन में अतिरिक्त जंक को हटाने के लिए, संभवतः, गलत तरीके से पूंजीकृत उदाहरण मैं अपना कोड इस तरह दिखूंगा।

words = get_some_words() 
words.each_with_index do |word, index| 
    puts "word[#{index}] = #{word}" 
end 

मुझे यकीन नहीं है कि Sepp2K अजीब (शब्द, एक्स) चीज़ के साथ क्या कर रहा था।

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