2

我正在尝试从数组中删除重复的对象。

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

我正在添加两个已经在数组中的对象

4

5 回答 5

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];
}
于 2013-01-04T07:22:52.397 回答
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];
    }
}
于 2013-01-04T06:54:39.673 回答
1

您的代码有几个问题。无论如何,如果您不关心元素的顺序,删除重复项的最简单方法是使用 an NSSet,因为 anNSSet不允许重复项:

NSArray *uniqueObjects = [[NSSet setWithArray:arrSelectedVehicle] allObjects];
于 2013-01-04T06:54:50.873 回答
0

错误消息说得很清楚:当您对可变集合使用快速枚举时,您无法修改它的内容(因为这是错误的)。您必须制作它的可变副本,并从该副本中删除重复项。

于 2013-01-04T06:54:32.157 回答
0

您不能使用 for 循环,然后从您正在迭代的数组中添加或删除对象 (arrSelectedVehicle)。而是尝试使用正常的对象构建一个新数组。在循环结束时,您可以将该数组分配回 arrSelectedVehicle。

于 2013-01-04T06:58:14.690 回答