2010-10-19 38 views
10

Jak mogę usunąć duplikaty w nsarray. na przykład moja tablica zawiera następujące dane. Chcę porównać z sąsiednimi datami, aby uniknąć duplikatów, ale przechodzi przez błąd.usuwanie duplikatów w nsarray

Czy ktoś kierować mi co mam zamiar złego

kalendarz studiów pierwszego

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

mój kod

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

Pozdrowienia, Sathish

+0

Czego spróbować i co jest błąd dostać? – willcodejavaforfood

+0

Dodałem kod w moim poście –

+0

Czy próbujesz powiedzieć, że tablica to wszystkie ciągi? Lub naprzemiennie NSDates i stringów? –

Odpowiedz

45

Można używać zestawów. Duplikaty zostaną automatycznie usunięte po utworzeniu.

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

Należy pamiętać, że zestaw jest nieuporządkowany.

Zgodnie z komentarzem Brenta, nowszym rozwiązaniem problemu, który pozwoli zachować elementy w porządku.

[[NSOrderedSet orderedSetWithArray:dates] array] 
+0

Joseph problem jest to, że daty są 2d array [[date1 - value], [date1 - value], [date2 - value]] Usunąłem zduplikowaną datę sam, a wartość odpowiadająca powinna być taka, jaka jest. Mam na myśli tablicę mającą konsekwentne wartości (data, wartość, data, wartość itp.). –

+0

Czy chcesz otrzymać tylko jedną wartość dla każdej daty? Lub czy jedna data może być w tablicy wiele razy, jeśli wartości są różne? –

+0

Tak, to prawda, Józefie, powinien on mieć jedną wartość. na przykład 2 daty ma tę samą wartość tylko my usunęliśmy jedną z nich (ale wartość może być powielona, ​​nie należy jej usuwać) (mam na myśli tylko zjednoczenie dat w tablicy 2d) –

1

Aby znaleźć identyczne obiekty, które powinny lepiej używać –indexOfObjectIdenticalTo: lub - indexOfObjectIdenticalTo:inRange:

+0

dzięki eviltrue –

1

użyj tego, jeśli użyłeś 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

najczystszym sposobem

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

+0

To jest piękne. Dziękuję Ci. –

Powiązane problemy