2010-10-19 17 views
10

comment puis-je supprimer les doublons dans nsarray. par exemple mon tableau contient les données suivantes. Je veux comparer avec des dates adjacentes pour éviter les doublons, mais il traverse l'erreur.supprimer des doublons dans nsarray

Quelqu'un peut-il me guider ce que je me trompe

calendrier de première

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

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

Cordialement, sathish

+0

Qu'est-ce que vous essayez et quelle est l'erreur que vous obtenez? – willcodejavaforfood

+0

J'ai ajouté le code dans mon article –

+0

Etes-vous en train d'essayer de dire que le tableau est toutes les chaînes? Ou alternance NSDates et chaînes? –

Répondre

45

Vous pouvez utiliser des ensembles. Les doublons seront supprimés automatiquement lors de la création.

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

Gardez à l'esprit qu'un ensemble n'est pas ordonné.

Selon le commentaire de Brent, une solution plus récente au problème qui vous permettra de garder les éléments dans l'ordre.

[[NSOrderedSet orderedSetWithArray:dates] array] 
+0

Joseph problème c'est dates est 2d tableau [[date1 - valeur], [date1 - valeur], [date2 - valeur]] J'ai enlever la date en double seul et et la valeur correspondante devrait être telle qu'elle est. Je veux dire que le tableau a des valeurs consectives (date, valeur, date, valeur, etc.) –

+0

Voulez-vous vous retrouver avec une seule valeur pour chaque date? Ou peut-on être plusieurs fois dans le tableau, si les valeurs sont différentes? –

+0

Oui Joseph à droite - il devrait se retrouver avec une valeur. par exemple 2 dates a la même valeur seulement nous en avons enlevé une (mais la valeur peut être dupliquée elle ne devrait pas être enlevée) (je veux dire juste l'union des dates seules dans le tableau 2d) –

1

Pour trouver des objets identiques vous devez mieux utiliser –indexOfObjectIdenticalTo: ou - indexOfObjectIdenticalTo:inRange:

+0

merci eviltrue –

1

utilisez ceci si vous avez utilisé 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

façon Cleanest

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

+0

C'est magnifique. Je vous remercie. –