2010-10-19 15 views
10

come posso rimuovere i duplicati in nsarray. per esempio il mio array contiene i seguenti dati. Voglio confrontarmi con le date adiacenti per evitare i duplicati ma attraverso l'errore.rimozione di duplicati in nsarray

Qualcuno mi può guidare quello che sto andando male

calendario di primo

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

mio codice

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

saluti, sathish

+0

Cosa hai provato e che cosa è l'errore che si ottiene? – willcodejavaforfood

+0

ho aggiunto il codice nel mio post –

+0

Stai cercando di dire che l'array è tutto stringhe? O alternando NSDates e stringhe? –

risposta

45

È possibile utilizzare set. I duplicati saranno rimossi automaticamente al momento della creazione.

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

Tenere presente che un set non è ordinato.

Come da commento di Brent, una soluzione più recente al problema che consentirà di mantenere gli elementi in ordine.

[[NSOrderedSet orderedSetWithArray:dates] array] 
+0

Joseph problema è che è data è matrice 2d [[data1 - valore], [data1 - valore], [data2 - valore]] Ho rimosso solo la data duplicata e il valore corrispondente dovrebbe essere così com'è. Voglio dire che la matrice ha valori consecutivi (data, valore, data, valore ecc.) –

+0

Vuoi finire con un solo valore per ogni data? Oppure una data può essere nell'array più volte, se i valori sono diversi? –

+0

Sì, Giuseppe, dovrebbe finire con un valore. per esempio 2 date ha lo stesso valore solo ne abbiamo rimosso uno (ma il valore può essere duplicato non deve essere rimosso) (intendo solo l'unione delle date da solo nell'array 2d) –

1

per trovare oggetti identici si dovrebbe meglio usare –indexOfObjectIdenticalTo: o - indexOfObjectIdenticalTo:inRange:

+0

grazie eviltrue –

1

utilizzare questo se si è utilizzato 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

modo più pulito

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

+0

Questo è bello. Grazie. –

Problemi correlati