2010-10-19 15 views
10

में डुप्लिकेट को हटाकर मैं nsarray में डुप्लीकेट कैसे हटा सकता हूं। उदाहरण के लिए मेरे सरणी में निम्नलिखित डेटा शामिल है। मैं डुप्लिकेट से बचने के लिए आसन्न तिथियों से तुलना करना चाहता हूं लेकिन यह त्रुटि के माध्यम से है।nsarray

किसी को भी मेरा मार्गदर्शन कर सकते हैं क्या मैं गलत

कैलेंडर जा रहा हूँ पहली

( 
2010-09-25 17:00:00 GMT, 
"AAA", 
2010-09-25 17:00:00 GMT, 
"AAA", 
2010-09-26 17:00:00 GMT, 
"BBB", 
2010-09-26 17:00:00 GMT, 
"BBB", 
2010-09-27 17:00:00 GMT, 
"CCCC", 
2010-09-27 17:00:00 GMT, 
"CCC", 
2010-09-28 17:00:00 GMT, 
"AAA", 
2010-09-28 17:00:00 GMT, 
"AAA", 
2010-09-29 17:00:00 GMT, 
"DDDD", 
2010-09-29 17:00:00 GMT, 
"DDDD", 
2010-09-30 17:00:00 GMT, 
"BBBB" 
) 

मेरी कोड

NSArray dates; //dates contain above values 
NSMutableArray *temp_date = [[NSMutableArray alloc] init]; 

for (int i=0; i<[dates count]; i+=2){ 
    BOOL day; 

    if ([dates count]-2 >i) { 
     day = [[dates objectAtIndex:i] compare:[dates objectAtIndex:i+2]]; 
    } 

    if (day) { 
     [temp_date addObject:[dates objectAtIndex:i]]; 
     [temp_date addObject:[dates objectAtIndex:i+1] ]; 
    } 
} 

सादर, सतीश

+0

आप क्या प्रयास किया है और क्या त्रुटि आप प्राप्त है? – willcodejavaforfood

+0

मैंने अपनी पोस्ट –

+0

में कोड जोड़ा है क्या आप यह कहने की कोशिश कर रहे हैं कि सरणी सभी तार है? या NSDates और तारों को बदलना? –

उत्तर

45

आप सेट का उपयोग कर सकते हैं। सृजन पर स्वचालित रूप से डुप्लिकेट हटा दिए जाएंगे।

NSArray *cleanedArray = [[NSSet setWithArray:dates] allObjects]; 

ध्यान रखें कि एक सेट अनियंत्रित है।

ब्रेंट की टिप्पणी के अनुसार, समस्या का एक और हालिया समाधान जो आपको तत्वों को क्रम में रखने की अनुमति देगा।

[[NSOrderedSet orderedSetWithArray:dates] array] 
+0

जोसेफ समस्या यह है कि तारीख 2 डी सरणी है [[date1 - value], [date1 - value], [date2 - value]] मैंने अकेले डुप्लिकेट दिनांक हटा दिया है और इसी तरह के मान के समान होना चाहिए। मेरा मतलब है कि सरणी में लगातार मान हैं (दिनांक, मूल्य, दिनांक, मूल्य इत्यादि ..) –

+0

क्या आप प्रत्येक तारीख के लिए केवल एक मान के साथ समाप्त करना चाहते हैं? या मान अलग-अलग होने पर एक तिथि कई बार सरणी में हो सकती है? –

+0

हां जोसेफ सही- इसे एक मूल्य के साथ समाप्त होना चाहिए। उदाहरण के लिए 2 तिथियों में एक ही मूल्य है, हमने केवल इसे हटा दिया है (लेकिन मूल्य को डुप्लीकेट किया जा सकता है इसे हटाया नहीं जाना चाहिए) (मेरा मतलब है कि 2 डी सरणी में अकेले तिथियों का संघ) –

1

लगाने के लिए समान वस्तुओं आपको चाहिए बेहतर उपयोग –indexOfObjectIdenticalTo: या - indexOfObjectIdenticalTo:inRange:

+0

धन्यवाद बुराई –

1

यदि आप mutableArray का उपयोग किया है तो इसका उपयोग करें।

NSArray *copy = [mutableArray copy]; 

NSInteger index = [copy count] - 1; 

for (id object in [copy reverseObjectEnumerator]) { 

    if ([mutableArray indexOfObject:object inRange:NSMakeRange(0, index)] != NSNotFound) { 
     [mutableArray removeObjectAtIndex:index]; 
    } 
    index--; 
} 
[copy release]; 
5

स्पष्ट तरीका

NSArray *noDuplicatesDates = [dates valueForKeyPath:@"@distinctUnionOfObjects.self"];

+0

यह सुंदर है। धन्यवाद। –