रुबी 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 }
आपका प्रश्न क्या है? मैं समझ नहीं पा रहा हूं कि आप क्या पूछ रहे हैं। –
आह, मुझे पता था कि यह अस्पष्ट था। काउंटर वैरिएबल का ट्रैक कैसे रखें। – s84