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

私はすでに配列にある2つのオブジェクトを追加しています

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

コードにはいくつかの問題があります。とにかく、要素の順序を気にしない場合、重複を削除する最も簡単な方法は、 を使用するNSSetことです。NSSetは重複を許可しないためです。

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 に答える