2016-09-30 9 views
8
में छोरों के लिए नेस्टेड से बाहर तोड़

मैं एक काफी अप्रभावी तरह से नेस्टेड छोरों से बाहर तोड़ने की कोशिश की है:कैसे जूलिया

BreakingPoint = false 
a=["R1","R2","R3"] 
b=["R2","R3","R4"] 
for i in a 
    for j in b 
    if i == j 
     BreakingPoint = true 
     println("i = $i, j = $j.") 
    end 
    if BreakingPoint == true; break; end 
    end 
    if BreakingPoint == true; break; end 
end 

वहाँ ऐसा करने के लिए एक आसान तरीका है? मेरी वास्तविक समस्या में, मुझे पता नहीं है कि a और b में क्या हैं, इसके अलावा ASCIIString एस हैं। नमूना कोड में सरणी नाम (a और b) मेटा-प्रोग्रामिंग विधियों के माध्यम से स्वत: जेनरेट किए जाते हैं।

उत्तर

9

आप दो बातें

में से एक पाश बयान है क्या कर सकते हैं (अगर thats क्या इसके कहा जाता है) एक बहु बाहरी पाश

for i in a, j in b 
    if i == j 
     break 
    end 
end 

जो साफ है, लेकिन हमेशा संभव नहीं है में

मैं इस सुझाव के लिए क्रूस पर चढ़ाया जाएगा, लेकिन आप @goto का उपयोग करें और @label कर सकते हैं

for i in a 
    for j in b 
     if i == j 
      @goto escape_label 
     end 
    end 
end 

@label escape_label 

यदि आप कोड को बनाए रखने/समीक्षा करने वाले लोगों के लिए @ गोटो/@ लेबल तरीके से जाते हैं, तो लेबल के साथ नेविगेटिंग कोड के रूप में आपके उपयोग को सही तरीके से दस्तावेज करें,

बहु-लूप ब्रेक पर चर्चा के लिए , this

+3

नाम 'ब्रेक' या यादृच्छिक बूलियन के साथ लेबल के बारे में वास्तव में कुछ भी अपठनीय नहीं है। जब तक इसका दुरुपयोग नहीं किया जाता है, तब तक '@ गोटो' और 'लेबल' की अनचाहे नकारात्मक प्रतिष्ठा होती है। कुछ प्रोग्रामर अब तक उनसे बचने के लिए जाते हैं कि वे कोड को कम अपठनीय बनाते हैं, क्योंकि वे एक बूलियन सूप –

+1

के साथ '@ गोटो' को प्रतिस्थापित करते हैं, मैं आपकी राय साझा करता हूं, मुझे लेबल का उपयोग करना पसंद है, और शायद ही कभी बूलियन ताले का उपयोग करें, जैसा कि उन्हें लगता है अनाड़ी – isebarn

9

2 डी लूप को फ़ंक्शन में रखें, और जब आप break पर return करें।