2010-10-19 5 views
10

Wie kann ich Duplikate in Nsarray entfernen. Zum Beispiel enthält mein Array folgende Daten. Ich möchte mit benachbarten Daten vergleichen, um Dubletten zu vermeiden, aber es ist ein Fehler.Entfernen von Duplikaten in Nsarray

Kann mir jemand führen, was ich falsch werde

Kalender erster

( 
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" 
) 

meinen Code

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] ]; 
    } 
} 

Grüße, sathish

+0

Was haben Sie versucht, und was ist der Fehler, den Sie bekommen? – willcodejavaforfood

+0

Ich habe den Code in meinem Beitrag hinzugefügt –

+0

Willst du sagen, dass das Array alle Zeichenfolgen ist? Oder wechselnde NSDates und Strings? –

Antwort

45

Sie könnten Sätze verwenden. Duplikate werden bei der Erstellung automatisch entfernt.

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

Denken Sie daran, dass ein Satz ungeordnet ist.

Laut Brents Kommentar, eine neuere Lösung für das Problem, mit dem Sie die Elemente in Ordnung zu halten.

[[NSOrderedSet orderedSetWithArray:dates] array] 
+0

Joseph Problem ist es ist Daten ist 2d Array [[Datum1 - Wert], [Datum1 - Wert], [Datum2 - Wert]] Ich habe doppelte Datum allein entfernen und Wert entsprechend sollte sein, wie es ist. Ich meine Array hat konsekutive Werte (Datum, Wert, Datum, Wert usw.) –

+0

Möchten Sie mit nur einem Wert für jedes Datum enden? Oder kann ein Datum mehrmals im Array sein, wenn die Werte unterschiedlich sind? –

+0

Ja Joseph richtig - es sollte mit einem Wert enden. zum Beispiel 2 Daten haben den gleichen Wert nur wir haben einen davon entfernt (aber Wert kann dupliziert werden, sollte nicht entfernt werden) (ich meine nur Vereinigung von Daten allein im 2d Array) –

1

Um identische Objekte zu finden, sollten Sie besser verwenden –indexOfObjectIdenticalTo: oder - indexOfObjectIdenticalTo:inRange:

+0

danke eviltrue –

1

Verwenden Sie dies, wenn Sie muableArray verwendet haben.

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

sauberste Weg

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

+0

Das ist schön. Vielen Dank. –