स्पष्टता के लिए मैं एक प्रारंभिक लूप बनाना पसंद करता हूं जहां मैं हटाने के लिए आइटम एकत्र करता हूं। तब मैं उन्हें हटा देता हूं। यहाँ उद्देश्य-सी 2.0 सिंटैक्स का उपयोग कर एक नमूना दिया गया है:
NSMutableArray *discardedItems = [NSMutableArray array];
for (SomeObjectClass *item in originalArrayOfItems) {
if ([item shouldBeDiscarded])
[discardedItems addObject:item];
}
[originalArrayOfItems removeObjectsInArray:discardedItems];
फिर इस बारे में कोई सवाल नहीं है कि क्या सूचकांकों को सही ढंग से अपडेट किया जा रहा है, या अन्य छोटे बहीखाता विवरण।
जोड़ने के लिए संपादित:
यह अन्य उत्तरों में नोट किया गया है कि व्युत्क्रम सूत्रीकरण तेज होना चाहिए। यदि आप सरणी के माध्यम से पुनरावृत्ति करते हैं और वस्तुओं को छोड़ने के लिए रखने के बजाय वस्तुओं की एक नई सरणी बनाते हैं। यह सच हो सकता है (हालाँकि किसी नए ऐरे को आवंटित करने, और पुराने को त्यागने की स्मृति और प्रसंस्करण लागत के बारे में क्या?) लेकिन फिर भी अगर यह तेज़ है तो यह उतना बड़ा सौदा नहीं हो सकता है क्योंकि यह एक भोली कार्यान्वयन के लिए होगा, क्योंकि NSArrays "सामान्य" सरणियों की तरह व्यवहार न करें। वे बात करते हैं लेकिन वे एक अलग तरह से चलते हैं। एक अच्छा विश्लेषण यहाँ देखें:
उलटा सूत्रीकरण अधिक तेज़ हो सकता है, लेकिन मुझे यह ध्यान रखने की आवश्यकता नहीं है कि यह क्या है, क्योंकि उपरोक्त सूत्रीकरण हमेशा मेरी आवश्यकताओं के लिए पर्याप्त तेज़ रहा है।
मेरे लिए टेक-होम संदेश का उपयोग करना है जो भी सूत्रीकरण आपके लिए स्पष्ट है। यदि आवश्यक हो तो ही ऑप्टिमाइज़ करें। मैं व्यक्तिगत रूप से उपरोक्त सूत्रीकरण को स्पष्ट करता हूं, यही कारण है कि मैं इसका उपयोग करता हूं। लेकिन अगर उलटा सूत्र आपके लिए स्पष्ट है, तो इसके लिए जाएं।