删除nsarray中的重复项

sat*_*mar 12 iphone duplicates nsarray

如何在nsarray中删除重复项.例如,我的数组包含以下数据.我想与相邻的日期进行比较,以避免重复,但它通过错误.

任何人都可以指导我出错的地方

日历第一 -

( 
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"
)
Run Code Online (Sandbox Code Playgroud)

我的代码

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] ];
    }
}
Run Code Online (Sandbox Code Playgroud)

问候,sathish

Jos*_*ura 47

你可以使用套装.创建后将自动删除重复项.

NSArray *cleanedArray = [[NSSet setWithArray:dates] allObjects];
Run Code Online (Sandbox Code Playgroud)

请记住,集合是无序的.

根据布伦特的评论,这个问题的最新解决方案将允许您按顺序保持元素.

[[NSOrderedSet orderedSetWithArray:dates] array]
Run Code Online (Sandbox Code Playgroud)

  • 如果你的目标是iOS 5或更高版本,或狮子座或更高版本,你现在可以使用`[[NSOrderedSet orderedSetWithArray:dates] array]来对数组进行重复数据删除,同时保留其元素的顺序.(我相信它会将每个重复元素保留在第一个索引处,但我不确定.) (4认同)

goc*_*oce 7

最干净的方式

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