2010-10-19 91 views
10

如何删除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" 
) 

我的代码

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

问候, Sathish所在

+0

那你试试,什么是你的错误? – willcodejavaforfood 2010-10-19 08:44:21

+0

我在我的文章中添加了代码 – 2010-10-19 08:49:25

+0

你想说数组是全部字符串吗?或交替NSDates和字符串? – 2010-10-19 08:49:41

回答

45

你可以使用集合。创建时会自动删除重复项。

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

请记住,一组是无序的。

按照布伦特的评论,这个问题的更近的解决方案将允许您保持元素的有序性。

[[NSOrderedSet orderedSetWithArray:dates] array] 
+0

约瑟夫的问题是它是日期是2d数组[[日期1 - 值],[日期1 - 值],[日期2 - 值]]我已经删除重复的日期单独和相应的值应该是这样。我的意思是数组具有连续的值(日期,值,日期,值等)。 – 2010-10-19 09:34:43

+0

你想结束每个日期只有一个值?或者如果数值不同,是否可以多次存储数组中的某个日期? – 2010-10-19 09:43:09

+0

是的约瑟夫 - 它应该以一个价值结束。例如2日期具有相同的值,只有我们已经删除其中一个(但价值可以复制它不应该被删除)(我的意思只是在二维数组中的日期联合) – 2010-10-19 09:48:23

1

要找到相同的,你应该对象更好地使用–indexOfObjectIdenticalTo:或 - indexOfObjectIdenticalTo:inRange:

+0

谢谢eviltrue – 2010-10-20 04:04:38

1

如果您使用了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

干净的方式

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

+0

这很美。谢谢。 – 2016-04-25 21:26:49