2012-02-23 23 views
12

नेस्ट ब्रेक, कैसे मैं break दोनों छोरों कर सकते हैं अगर मैं एक for पाश while लूप के अंदर के साथ एक while पाश है?ios पाश

मैं ऐसा इसलिए कर रहा हूं क्योंकि मुझे लगता है कि अतिरिक्त 250ms मुझे इन लूप को पूरा करने से नहीं मिलता है, जो मुझे लगता है कि मैं कुछ समय बाद मूल्यवान बनता हूं।

स्यूडोकोड:

while(alwaysTrue) { 
    for(NSArray *arr in twoThousandItems) { 
     if(IFoundWhatIWasLookingFor) { 
      // assign some stuff here 
      // break everything, not just the for loop. 
     } 
    } 
} 
+3

अब तक के सभी सुझाव सटीक लगते हैं। उनमें से कोई भी गलत नहीं होगा। जिस डिज़ाइन का मैं सुझाव दूंगा वह वह हिस्सा बना रहा है जिसे आप अपने स्वयं के कार्य/विधि से तोड़ना चाहते हैं और इससे वापस आना चाहते हैं। एब्स्ट्रक्शन कार्यात्मक और ऑब्जेक्ट उन्मुख प्रोग्रामिंग की मुख्य शक्ति है - इसका उपयोग करें। – bshirley

+0

रीटैग किया गया क्योंकि यह एक भाषा प्रश्न है, ओएस सवाल नहीं। :) – Almo

+0

@bshirley मैंने 'goto' का उपयोग किया, भले ही मैं इसके बारे में थोड़ा सा झुकाऊ हूं। यह पूरे एप्लिकेशन में केवल एक ही स्थान पर है, इसलिए मुझे लगता है कि यह ठीक है। हालांकि, कुछ कोड डिज़ाइन परिवर्तनों के कारण हम आपके सुझाव की एक विधि (जो हमेशा मेरी पहली पसंद है) पर स्विच करने में सक्षम थे। +1 – Jacksonkr

उत्तर

28

यह जहां goto अपने दोस्त है। हां, वह goto

while(alwaysTrue) { 
    for(NSArray *arr in twoThousandItems) { 
     if(IFoundWhatIWasLookingFor) { 
      // assign some stuff here 
      // break everything, not just the for loop. 
      goto BAIL; 
     } 
    } 
} 
BAIL: 
NSLog(@"Freedom!"); 

दूसरा विकल्प आपके लूप में शॉर्ट सर्किट रखना है।

while(alwaysTrue && !found) { 
    for(NSArray *arr in twoThousandItems) { 
     if(IFoundWhatIWasLookingFor) { 
      // assign some stuff here 
      // break everything, not just the for loop. 
      found = YES; 
      break; 
     } 
    } 
} 
+15

यह कोई भी मित्र नहीं है, 'गोटो' बुरा है। +1 – picciano

+4

'गोटो' पर पढ़ने के बाद ऐसा लगता है कि ** अतिदेय ** इसमें बुराई है। जबकि मैं * bshirley * द्वारा उल्लिखित रिटर्न फ़ंक्शंस का उपयोग करने का बड़ा प्रशंसक हूं, लेकिन एक 'गोटो' इस ** एक ** स्थिति के लिए काम करेगा। धन्यवाद और +1 – Jacksonkr

4

यह एक तरीका है। यह अन्य सी प्रकारों, और अन्य भाषाओं के लिए भी एक लागू तकनीक है।

bool breakOuterLoop = false; 
while(!breakOuterLoop) 
{ 
    for(NSArray *arr in twoThousandItems) 
    { 
     if(IFoundWhatIWasLookingFor) 
     { 
      // assign some stuff here 
      breakOuterLoop = true; 
      break; 
     } 
    } 
}