【问题标题】:Removing objects from NSMutableArray that are also contained in another NSMutableArray从 NSMutableArray 中删除也包含在另一个 NSMutableArray 中的对象
【发布时间】:2015-12-20 02:41:34
【问题描述】:

我有两个array,分别称为array1array2。我想从array1 中删除每个对象,即"nameId" 键的值可以在两个数组中找到。实际上我正在for loop 中尝试它,但这没有任何意义。它不会崩溃,它只是简单地调用else statement 中的日志,我不明白为什么会发生这种情况。也许有人可以告诉我正确的解决方案。

NSMutableArray *newArray = [self.array1 mutableCopy];

for (PFObject * object in newArray) {

    PFObject *placeholderObject = object;

    for (PFObject *object2 in self.array2) {

        if ([placeholderObject[@"nameId"] isEqualToString:object2[@"nameId"]]) {

            [self.array1 removeObject:object];

            NSLog (@"EXISTING OBJECT FOUND %@", object);
        } else {


            NSLog(@"UNIQUE OBJECT FOUND %@", idO[@"hirCime"]);

        }


    }


}

【问题讨论】:

  • 如果array1array2 是不可变数组,你不应该做“[newArray removeObject:object]”吗?另外,您是否通过 Xcode 调试器单步执行此操作以查看是否存在 placeHolderObject 的“nameId”等于 object2 中的内容的情况?
  • @MichaelDautermann 从快速枚举循环体中的数组中删除项目不是一个好主意——它可能会触发“NSArray 在枚举时发生突变”异常。不过,OP 绝对应该检查 if 声明。
  • 是的,你是对的,从这样的数组中删除项目。在从可变数组中删除项目的情况下,我通常使用reverse enumeration

标签: ios objective-c nsmutablearray


【解决方案1】:

创建数组的 mutableCopy 时,您会创建一个新数组,其中包含每个对象的副本,但它们不是相同的,因此 objectnewArray 的成员,但不是 @ 的成员987654323@ 所以你不能从那个数组中删除它。

这应该可行:

// Creates a new empty mutable array
NSMutableArray *newArray = [@[] mutableCopy]; 

for (PFObject *object in self.array) {

    BOOL found = NO;

    for (PFObject *object2 in self.array2) {

        if ([object[@"nameId"] isEqualToString:object2[@"nameId"]]) {
            found = YES;
            NSLog (@"EXISTING OBJECT FOUND %@", object);
            break;

        } else {
            NSLog(@"UNIQUE OBJECT FOUND %@", idO[@"hirCime"]);
        }
    }

    if (!found) {
        [newArray addObject:[object copy]];
    }
}

// And maybe you want this 
self.array = newArray;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多