我正在尝试从数组中删除重复的对象。
NSMutableArray* filterResults = [[NSMutableArray alloc] init];
BOOL copy;
// remove duplicate
if (![arrSelectedVehicle count] == 0)
{
for (Vehicles *a1 in arrSelectedVehicle) {
copy = YES;
for (Vehicles *a2 in filterResults) {
if ([a1.Vehicle_id isEqualToString:a2.Vehicle_id]) {
copy = NO;
[arrSelectedVehicle removeObjectIdenticalTo:a2];
break;
}
}
if (copy) {
[filterResults addObject:a1];
}
}
}
我正在添加两个已经在数组中的对象
答案 0 :(得分:6)
在枚举数组时无法修改数组。你可以做到以下几点:
NSMutableArray* filterResults = [[NSMutableArray alloc] init];
BOOL copy;
// remove duplicate
if (![arrSelectedVehicle count] == 0)
{
NSArray* arraycopy = [arrSelectedVehicle copy];
for (Vehicles *a1 in arraycopy) {
copy = YES;
for (Vehicles *a2 in filterResults) {
if ([a1.Vehicle_id isEqualToString:a2.Vehicle_id]) {
copy = NO;
[arrSelectedVehicle removeObjectIdenticalTo:a2];
break;
}
}
if (copy) {
[filterResults addObject:a1];
}
}
[arraycopy release];
}
答案 1 :(得分:1)
使用快速枚举时,无法修改数组。这就是错误告诉你的。你需要改变循环
for (NSUInteger i = 0; i < arrSelectedVehicle.count; i++) {
Vehicles *a1 = arrSelectedVehicle[i];
copy = YES;
for (NSUInteger j = 0; j < filterResults.count; j++) {
Vehicles *a2 = filterResults[j];
if ([a1.Vehicle_id isEqualToString:a2.Vehicle_id]) {
copy = NO;
[arrSelectedVehicle removeObjectIdenticalTo:a2];
break;
}
}
if (copy) {
[filterResults addObject:a1];
}
}
答案 2 :(得分:1)
您的代码存在一些问题。无论如何,如果您不关心元素的顺序,删除重复项的最简单方法是使用NSSet
,因为NSSet
不允许重复:
NSArray *uniqueObjects = [[NSSet setWithArray:arrSelectedVehicle] allObjects];
答案 3 :(得分:0)
错误消息说明了这一点:当您对其使用快速枚举时,您无法修改可变集合的内容(因为这是错误的)。您必须为其制作一个可变副本,并从该副本中删除重复项。
答案 4 :(得分:0)
您不能使用for循环,然后在迭代的数组中添加或删除对象(arrSelectedVehicle)。而是尝试使用可以正常的对象构建新数组。在循环结束时,您可以将该数组分配回arrSelectedVehicle。