我现在发疯了。我有一个带有一堆Person对象的NSMutableArray。我想删除重复的对象,但它不起作用。这就是我得到的:
NSMutableArray *withoutDoubles =[[NSMutableArray alloc]init];
NSArray *temp = [[NSArray alloc] initWithArray:tempResults];
for (Person *person in temp) {
if(![withoutDoubles containsObject:person]) {
[withoutDoubles addObject:person];
}
}
for (Person *person in withoutDoubles) {
NSLog(@"----> %@",person.name);
}
这不起作用,我仍然有重复。我也尝试过:
NSArray *temp = [[NSArray alloc] initWithArray:tempResults];
NSSet *set = [NSSet setWithArray:temp];
但它也没有用。我需要一些帮助。
提前致谢。
答案 0 :(得分:2)
您可能遇到Equals:方法的问题。当两个对象具有相同的散列时,它们是等于的。 isEquals: documentation
答案 1 :(得分:1)
如果您对副本的定义是两个单独的Person对象,其属性设置相同,那么实现此目的的最佳方法是在Person对象中覆盖这两个方法
- (BOOL)isEqual:(id)anObject
- (NSUInteger)hash
这将使您能够正确地实现比较。
然后您需要执行以下操作
for (Person *personToTest in temp) {
BOOL duplicate = NO;
for (Person *person in withoutDoubles) {
if ([personToTest isEqual:person]) {
duplicate = YES;
break;
}
}
if (!duplicate) {
[withoutDoubles addObject:personToTest];
}
}
答案 2 :(得分:0)
您确定具有相同名称的人确实是同一个对象(即指针指向同一个地址)吗?
答案 3 :(得分:0)
什么是人?任何自定义对象???如果是,则在该类中添加任何唯一ID,然后与该ID进行比较。
答案 4 :(得分:0)
尝试这个,我希望这可以帮到你
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 :(得分:0)
嗯,你可以这样做:
NSMutableArray*array1 = [NSMutableArray arrayWithObjects:person,person1,person2,nil];
NSMutableArray*array2 = [NSMutableArray arrayWithObjects:person1,person2,person,nil];
for (Person*person in array1)
{
if ([array2 containsObject:person])
{
[array2 removeObject:person];
}
}
这将删除array2
中找到的所有重复项。您还可以使用isEqual:
来比较对象,这取决于您。将array1
和array2
替换为您的两个数组,然后开始使用。
答案 6 :(得分:0)
一个班轮:uniqueArray = [[NSSet setWithArray:temp] allObjects];