2012-08-25 5 views
10

निम्नलिखित बयान पर विचार करें:ऑब्जेक्टिव-सी के लिए-इन लूप जाओ सूचकांक

for (NSString *string in anArray) { 

    NSLog(@"%@", string); 
} 

मैं कैसे एक पारंपरिक for पाश का उपयोग किए बिना और हर वस्तु के साथ string का मूल्य जाँच के बिना anArray में string के सूचकांक प्राप्त कर सकते हैं anArray में?

उत्तर

34

ऑर्डर ऑब्जेक्ट ऑर्डर में पुनरावृत्ति की गारंटी है। तो:

NSUInteger index = 0; 
for(NSString *string in anArray) 
{ 
    NSLog(@"%@ is at index %d", string, index); 

    index++; 
} 

वैकल्पिक रूप से, ब्लॉक प्रगणक का उपयोग करें:

[anArray 
    enumerateObjectsUsingBlock: 
     ^(NSString *string, NSUInteger index, BOOL *stop) 
     { 
      NSLog(@"%@ is at index %d", string, index); 
     }]; 
-1

इस प्रयास करें।

for (NSString *string in anArray) 
{ 
    NSUInteger index = [anArray indexOfObject:string]; 
} 
+4

'- indexOfObject' एक 'ओ (एन)' ऑपरेशन है, इसलिए यह एल्गोरिदम 'ओ (एन^2)' है। यह प्रत्येक पुनरावृत्ति पर एक सूचकांक बढ़ाने या '- enumerateObjectsUsingBlock: 'का उपयोग करने से सख्ती से भी बदतर है, जिनमें से दोनों अभी भी' ओ (एन)' हैं। –

+4

यह उत्तर ** गलत ** है। यदि 'anArray' में डुप्लीकेट होते हैं, तो डुप्लिकेट तत्वों के लिए' अनुक्रमणिका' गलत होगा। – Pang

संबंधित मुद्दे