2010-09-29 11 views
11

से पहले अगले और तत्व को वापस लौटाना मैं प्रत्येक के साथ सरणी के दौरान सरणी से वर्तमान और पहले तत्व को कैसे प्राप्त कर सकता हूं।एक सरणी पर Iterate और वर्तमान

array.each do |a| 
    # I want to fetch next and before current element. 
end 
+1

दो सवाल: 1) क्या "पिछला" है

[nil, *array, nil].each_cons(3){|prev, curr, nxt| puts "prev: #{prev} curr: #{curr} next: #{nxt}" } prev: curr: a next: b prev: a curr: b next: c prev: b curr: c next: 

आप चाहें, तो आप नई सरणी विधि में लपेट कर सकते हैं शुरुआत में तत्व और अंत में "अगला" तत्व? 2) क्या 'अगला' तत्व अगले पुनरावृत्ति का 'वर्तमान' तत्व होना चाहिए (यानी, समूह के बाद [ar [4], ar [5], ar [6]] ', क्या अगला समूह ' [आरआर [5], आर [6], आर [7]] 'या' [आरआर [7], आर [8], आर [9]] ')? – Chuck

उत्तर

34

लें देखो:

class Array 
    def each_with_prev_next &block 
    [nil, *self, nil].each_cons(3, &block) 
    end 
end 
#=> nil 

array.each_with_prev_next do |prev, curr, nxt| 
    puts "prev: #{prev} curr: #{curr} next: #{nxt}" 
end 
+3

'[nil] * array + [nil]' के बजाय '[nil, * array, nil]' के बारे में कैसे? –

+0

ग्रेट! मुझे '+' संस्करण से नफरत है, लेकिन मैंने सोचा कि कुछ भी सुंदर नहीं है। यदि आपको कोई फर्क नहीं पड़ता तो मैं जवाब अपडेट कर दूंगा। –

+0

यदि कोई व्यक्ति केवल उन पर पुनरावृत्ति करने के बजाय तत्वों को "मानचित्र" करने का कोई तरीका ढूंढ रहा है तो आप '1..9) .each_cons (2) .map {| a | ए} ' – equivalent8

9

आप Enumerable#each_with_index उपयोग कर सकते हैं प्रत्येक तत्व के सूचकांक प्राप्त करने के लिए के रूप में आप पुनरावृति, और प्रयोग कि आसपास के आइटम प्राप्त करने। Enumerable#each_cons विधि पर

array.each_with_index do |a, i| 
    prev_element = array[i-1] unless i == 0 
    next_element = array[i+1] unless i == array.size - 1 
end 
संबंधित मुद्दे