2011-04-22 12 views
17

मैं इस स्थितिआईओएस: NSMutableArray initWithCapacity

array = [[NSMutableArray alloc] initWithCapacity:4]; //in viewDidLoad 

if (index == 0){ 
    [array insertObject:object atIndex:0]; 
} 

if (index == 1){ 
    [array insertObject:object atIndex:1]; 
} 

if (index == 2){ 
    [array insertObject:object atIndex:2]; 
} 

if (index == 3){ 
    [array insertObject:object atIndex:3]; 
} 

लेकिन अगर मैं आदेश वस्तु में सम्मिलित यह सब ठीक है, बजाय अगर मैं इस क्रम में सरणी भरने: 0 और 3 के बाद, यह काम नहीं करते ठीक है, क्यों ???

+0

क्या आप 4 पर ऑब्जेक्ट इंडेक्स डालने का प्रयास कर रहे हैं? – saadnib

+0

नहीं ..... मैं इंडेक्स 0 पर ऑब्जेक्ट डालने के लिए उदाहरण देता हूं और इंडेक्स 2 पर ऑब्जेक्ट डालने के लिए प्रयास करता हूं लेकिन यह – CrazyDev

उत्तर

49

आप NSMutableArray में इंडेक्स 3 पर ऑब्जेक्ट को सम्मिलित नहीं कर सकते हैं, भले ही इसकी क्षमता 4 हो। म्यूटेबल सरणी में कई "कोशिकाएं" उपलब्ध हैं क्योंकि इसमें ऑब्जेक्ट्स हैं। यदि आप एक म्यूटेबल सरणी में "रिक्त कक्ष" रखना चाहते हैं तो आपको [NSNull null] ऑब्जेक्ट्स का उपयोग करना चाहिए। यह एक विशेष स्टब-ऑब्जेक्ट्स है जिसका मतलब है कि यहां कोई डेटा नहीं है।

NSMutableArray *array = [[NSMutableArray alloc] init]; 

for (NSInteger i = 0; i < 4; ++i) 
{ 
    [array addObject:[NSNull null]]; 
} 

[array replaceObjectAtIndex:0 withObject:object]; 
[array replaceObjectAtIndex:3 withObject:object]; 
-3

आप पहले उदाहरण के लिए इंडेक्स 0 पर इंडेक्स 0 पर सम्मिलित नहीं कर सकते हैं, फिर सूचकांक 2 पर आपको स्टेम डालने के चरण को 0,1,2,3,4,5 ....., n में डालना होगा, जो आप चाहते हैं कर ??? आपकी समस्या क्या है ???

आप एक ऐरे बनाने की कोशिश कर सकते हैं, फिर इसे शून्य आइटम के साथ डालें और उसके बाद उसमें सम्मिलित करें !!! मुझे लगता है यह उचित होगा !!!

+0

काम नहीं करता है अगर मैं ऑर्डर ऑब्जेक्ट में डालता हूं तो समस्या नहीं है .... लेकिन अगर मैं सम्मिलित करना चाहता हूं एक ऑब्जेक्ट पहले 0 स्थिति में और स्थिति 2 या 3 के बाद एक समस्या है, ठीक है? आरोही ठीक है लेकिन यादृच्छिक नहीं ... क्या आप समझते हैं? – CrazyDev

10

सी शैली int a[10] में आकार 10 की एक सरणी बनाता है और आप किसी भी क्रम में 9 करने के लिए 0 से किसी भी सूचकांक पहुँच सकते हैं। लेकिन यह initWithCapacity या arrayWithCapacity के साथ मामला नहीं है। यह सिर्फ एक संकेत है कि अंतर्निहित प्रणाली प्रदर्शन में सुधार के लिए उपयोग कर सकते हैं। इसका मतलब है कि आप आदेश से बाहर नहीं आ सकते हैं। यदि आपके पास आकार n का एक म्यूटेबल सरणी है तो आप केवल इंडेक्स 0 से n, 0 से n-1 मौजूदा स्थिति के लिए और n से अंतिम स्थिति में डालने के लिए सम्मिलित कर सकते हैं। तो 0, 1, 2, 3 मान्य है। लेकिन 0, 3 या 1,2 ऑर्डर वैध नहीं है।

0

यदि आप ऐसा करना चाहते हैं तो आप किसी भी यादृच्छिक अनुक्रमणिका में सम्मिलित नहीं कर सकते हैं, तो पहले अपनी सरणी को शून्य ऑब्जेक्ट्स से प्रारंभ करें, फिर बदलें ऑब्जेक्टएटइंडेक्स को कॉल करें।

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