Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa-枚举可变数组,删除对象_Cocoa_Nsmutablearray_Duplicates_Enumerate - Fatal编程技术网

Cocoa-枚举可变数组,删除对象

Cocoa-枚举可变数组,删除对象,cocoa,nsmutablearray,duplicates,enumerate,Cocoa,Nsmutablearray,Duplicates,Enumerate,我有一个可变数组,其中包含可变字典,其中包含关键字latitude、longitude和id的字符串。有些纬度和经度值是相同的,我希望从数组中删除重复项,以便每个位置只有一个对象 我可以枚举我的数组,并使用第二个枚举检查每个对象,以查找具有不同ID但纬度和经度相同的对象,但如果我尝试删除该对象,则在枚举过程中会禁用该数组 是否有任何方法可以在枚举时从数组中移除对象,以便我只在更新数组时枚举当前对象集 希望这个问题有意义 谢谢, Howie在枚举时计算索引变量。当你发现一本你想删除的字典时,把它的

我有一个可变数组,其中包含可变字典,其中包含关键字latitude、longitude和id的字符串。有些纬度和经度值是相同的,我希望从数组中删除重复项,以便每个位置只有一个对象

我可以枚举我的数组,并使用第二个枚举检查每个对象,以查找具有不同ID但纬度和经度相同的对象,但如果我尝试删除该对象,则在枚举过程中会禁用该数组

是否有任何方法可以在枚举时从数组中移除对象,以便我只在更新数组时枚举当前对象集

希望这个问题有意义

谢谢,
Howie

在枚举时计算索引变量。当你发现一本你想删除的字典时,把它的索引添加到一个目录中。然后,在完成枚举后,发送数组,传递索引集

另一种方法是构建第二个数组,然后向第一个数组发送
setArray:
消息,传递第二个数组或释放第一个数组,保留第二个数组,并将第二个数组设置为新的第一个数组


在一个不相关的注释上,你可以考虑用字典替换字典。它倾向于使代码更简洁。

实际上你可以。您需要从顶部索引转到0。 试试这个:

for (int i = [mutableArray count] -1; i >=0; i--) {
    id yourObject = [mutableArray objectAtIndex: i];
    BOOL needToDelete;
    // place you conditions here...

    if (needToDelete) {
        [mutableArray removeObject: yourObject];
    }
}

谢谢你的建议-我确实试过这样的方法,但是有个问题。如果我在索引3上,发现它与索引4具有相同的位置,我会将索引4添加到数组“待删除”。当我在下一次迭代中循环时,我希望跳过索引4处的对象,因为我已经知道它是重复的。有什么方法可以像我列举的那样从原始数组中删除对象,或者使用其他循环方法吗?沃德,彼得建议的两种方法都没有你描述的问题。不过,如果您想手动执行操作,有一种简单的方法可以避免这种情况:从最高索引到最低索引对要删除的对象进行迭代。Ward:不,在枚举数组时不能对其进行变异。这将导致可可例外。必须在循环后对其进行变异或替换,或在副本上进行循环。我建议使用
removeObjectsIndexes:
解决方案。我可以使用reverseObjectEnumerator吗?可以。我刚刚用reverseObjectEnumerator测试了它,效果很好。