如何删除NSArray中的重复项?

时间:2011-03-12 11:58:58

标签: iphone objective-c nsmutablearray nsarray

我从sqlite文件中访问了数据作为NSMutableArray [model_Array],其中我有重复的信息[两个/三]所以我想删除它,我试图通过下面给出的两个不同的想法将MutableArray分配给另一个NSMutableArray [allItems]

AppDelegate *readTheDatabase = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 

allItems = [[NSMutableArray alloc] initWithArray:readTheDatabase.model_Array];  
NSSet *uniqueItems; 
uniqueItems = [NSSet setWithArray:allItems];

NSMutableArray *uniqueItems = [NSMutableArray array];
for (id item in allItems)
    if (![uniqueItems containsObject:item])
        [uniqueItems addObject:item];

但无法删除重复数据。请任何人帮助,并建议我克服这个问题。提前谢谢。

3 个答案:

答案 0 :(得分:3)

对于isEqual:方法,数组中的对象显然不会返回true。

数组包含哪种对象?

我假设它是一些代表数据库中数据的自定义模型类。

您应该查看NSObject以及isEqual:hash:方法的文档。

您将学习如何表达两个对象何时相等,这就是NSArrayNSSet等确定对象是否已包含在集合中的方式。

答案 1 :(得分:1)

如果您从数据库查询中获得重复项,我建议重新构造查询,以便它不会产生重复项。即。使用SELECT DISTINCT ...代替SELECT ...

答案 2 :(得分:0)

如果你使用NSSet然后转到NSArray - 否则会导致崩溃,因为它会在NSSet,而不是NSSArray

NSSet *uniqueItems= [NSSet setWithArray:YourArray];

NSArray *array = [[NSArray alloc]initWithArray:[uniqueItems allObjects]]; 

for (int i=0; i<[array count]; i++) {
    NSLog(@"The Given Array is %@",[array objectAtIndex:i]);
}
祝你好运,做起来很简单.......