开发者

removing duplicates in nsarray

开发者 https://www.devze.com 2023-01-20 08:20 出处:网络
how can i remove duplicates in nsarray. for instance my array contains following data. I want to compare with adjacent dates to avoid duplicates but it throughs error.

how can i remove duplicates in nsarray. for instance my array contains following data. I want to compare with adjacent dates to avoid duplicates but it throughs error.

Can anyone guide me what i am going wrong

calendar first-

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

my 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:[da开发者_开发百科tes objectAtIndex:i+2]];
    }   

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

Regards, sathish


You could use sets. Duplicates will be removed automatically upon creation.

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

Bear in mind that a set is unordered.

As per Brent's comment, a more recent solution to the problem that will allow you to keep the elements in order.

[[NSOrderedSet orderedSetWithArray:dates] array]


Cleanest way

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


To find identical objects you should better use –indexOfObjectIdenticalTo: or –indexOfObjectIdenticalTo:inRange:


use this if you have used 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];
0

精彩评论

暂无评论...
验证码 换一张
取 消