each
इंडेक्स के साथ पुनरावृत्त करता है और आप अगली पुनरावृत्ति में प्रत्येक अन्य तत्व को आंतरिक loop
में एक तत्व हटा रहे हैं। यदि आप तत्वों की संख्या में वृद्धि करते हैं और लूप में पुनरावृत्ति की वर्तमान अनुक्रमणिका समेत आप बड़ी तस्वीर देख पाएंगे।
arr = [1,2,3,4,5,6,7,8,9]
arr.each_with_index do |x,ix|
puts "loop1: #{arr.inspect}, x: #{x}, ix: #{ix}"
arr.each_with_index do |y, iy|
puts "loop2: #{arr.inspect}, y: #{y}, iy: #{iy}"
puts "#{arr.delete(y)}"
end
end
परिणाम
loop1: [1, 2, 3, 4, 5, 6, 7, 8, 9], x: 1, ix: 0
loop2: [1, 2, 3, 4, 5, 6, 7, 8, 9], y: 1, iy: 0
1
loop2: [2, 3, 4, 5, 6, 7, 8, 9], y: 3, iy: 1
3
loop2: [2, 4, 5, 6, 7, 8, 9], y: 5, iy: 2
5
loop2: [2, 4, 6, 7, 8, 9], y: 7, iy: 3
7
loop2: [2, 4, 6, 8, 9], y: 9, iy: 4
9
loop1: [2, 4, 6, 8], x: 4, ix: 1
loop2: [2, 4, 6, 8], y: 2, iy: 0
2
loop2: [4, 6, 8], y: 6, iy: 1
6
=> [4, 8]
जब से तुम पाश के दौरान और बाद प्रत्येक सूचकांक यात्रा वृद्धि की जाती है लेकिन सरणी एक तत्व कम है हटा रहे हैं, इसलिए, यह अगले (और सभी) मिलान को हटा देता है तत्व उपलब्ध हैं और अंत में लूप तुलना करता है और लूप को रोकता है जब index >= length
कृपया उचित उत्तर – bronislav
@bronislav को स्वीकृति दें, इसे कुछ समय दें। यह केवल एक घंटा रहा है। वहां भीड़ नहीं है। –
@CarySwoveland, क्षमा करें – bronislav