2009-05-09 8 views
60

मुझे NSArray मिल गया है और इसे एक विशेष मामले में पीछे से फिर से चालू करना है, ताकि मैं पहले अंतिम तत्व को देख सकूं। यह प्रदर्शन कारणों से है: यदि अंतिम व्यक्ति को कोई समझ नहीं आता है, तो पिछले सभी को अनदेखा किया जा सकता है। तो मैं लूप तोड़ना चाहता हूँ। लेकिन अगर मैं 0 से एन तक आगे बढ़ता हूं तो यह काम नहीं करेगा। मुझे n से 0 तक जाना होगा। शायद एक विधि या फ़ंक्शन है जिसके बारे में मुझे पता नहीं है, इसलिए मुझे यहां पहिया का फिर से आविष्कार नहीं करना पड़ेगा।क्या एनएसएआरएआरए के पीछे पीछे हटने का कोई आसान तरीका है?

+4

"मैं उद्देश्य-सी में एनएसएआरएआरई को कैसे उलट सकता हूं?" एक पूरी तरह से अलग सवाल है। – Nestor

+0

स्विफ्ट: http://stackoverflow.com/questions/24508592/how-to-iterate-for-loop-in-reverse-order-in-swift – Suragch

उत्तर

179

अन्य उत्तर पर जोड़ने के लिए, आप -[NSArray reverseObjectEnumerator] संयोजन में तेजी से गणना की सुविधा के साथ ऑब्जेक्टिव-सी 2.0 में उपयोग कर सकते हैं (यदि उपलब्ध तेंदुए में, iPhone): कुछ अधिक जानकारी के साथ

for (id someObject in [myArray reverseObjectEnumerator]) 
{ 
    // print some info 
    NSLog([someObject description]); 
} 

स्रोत: http://cocoawithlove.com/2008/05/fast-enumeration-clarifications.html

+0

क्या यह तेजी से गणना माना जाता है, और क्या यह लूप के लिए नियमित सी से तेज़ है जो '[myArray count] -1' से शुरू होता है? आप पीछे 'एनएसएसटींग' पर फिर से कैसे जाते हैं? – ma11hew28

+0

मेरे पास अभी कोई लिंक नहीं है लेकिन कहीं एक वीडियो है (एक डब्ल्यूडब्ल्यूडीसी हो सकता है) जहां एक ऐप्पल इंजीनियर बताता है कि कितनी तेजी से गणना काम करती है और यह तेज़ क्यों है। यह इंडेक्स-आधारित एनएसएआरएआरई गणना और क्लासिक फाउंडेशन एन्युमेटर दोनों और परिदृश्य के आधार पर, बहुत अधिक प्रदर्शन करता है। –

+0

मुझे एक शब्दकोश पर लूप के लिए रिवर्स चलाने की ज़रूरत है, ऐसा कैसे करें? –

12

here से:

NSEnumerator* myIterator = [myArray reverseObjectEnumerator]; 
id anObject; 

while(anObject = [myIterator nextObject]) 
{ 
    /* do something useful with anObject */ 
} 
16

इस के बाद से performace के लिए, आप विकल्पों में से एक संख्या है और अच्छी तरह से उन सब को जो कारगर सिद्ध होगा कोशिश करने के लिए सलाह दी जाती है है।

  • [array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:…]
  • -[NSArray reverseObjectEnumerator]
  • Create a reverse copy of the array और फिर पाश के लिए एक मानक सी कि आम तौर पर
  • उपयोग के माध्यम से पुनरावृति और शुरू करने और सरणी के माध्यम से पीछे की ओर काम करते हैं।

अधिक चरम तरीकों (यदि प्रदर्शन सुपर महत्वपूर्ण है)

  • कैसे कोको तेज वस्तु गणन लागू करता है और रिवर्स में अपने स्वयं के बराबर बनाने के बारे में पढ़ें।
  • सी या सी ++ सरणी का उपयोग करें।

अन्य भी हो सकते हैं। इस मामले में, कोई भी इसे जोड़ने में स्वतंत्र महसूस करता है।

+1

मैं कहूंगा कि enumerateObjectsWithOptions: NSEnumerationReverse सबसे अच्छा जवाब है, खासकर अगर आपको यह जानने की जरूरत है कि आप किस इंडेक्स पर हैं। धन्यवाद!!! –

0
for (int i = ((int)[array count] - 1); i > -1; i--) { 
    NSLog(@"element: %@",array[i]); 
} 
संबंधित मुद्दे