oc删除数组中重复model的正确姿势

2018-11-23  本文已影响5人  Leo_L

网上有很多关于这方面的算法文章我见到的最多的就是一下这种形式:

for (NSInteger i = 0; i < self.selectedModelArray.count; i++) {
        for (NSInteger j = i+1;j < self.selectedModelArray.count; j++) {
            AssistantModel *tempModel = self.selectedModelArray[i];
            AssistantModel *model = self.selectedModelArray[j];
            if ([tempModel.assistantId isEqualToString:model.assistantId]) {
                [self.selectedModelArray removeObject:model];
            }
        }
    }

这种方式是不对的,当你数据量足够多时,数据中间重复的model比较多,删除的比较多,self.selectedModelArray.count在减少,此时第二个for循环,的j的值就有可能等于self.selectedModelArray.count,而此时源数组还没有完全便利。
正确的做法用改新建一个数组来存放源数组的数据,删除的时候删除新建数组里面的对象,最后得到的就是没有重复数据的数组了。

 NSMutableArray *dataArr = [NSMutableArray array];
    [dataArr addObjectsFromArray:self.selectedModelArray];
    for (NSInteger i = 0; i < self.selectedModelArray.count; i++) {
        AssistantModel *tempModel = self.selectedModelArray[i];
        for (NSInteger j = i+1;j < self.selectedModelArray.count; j++) {
            AssistantModel *model = self.selectedModelArray[j];
            if ([tempModel.assistantId isEqualToString:model.assistantId]) {
                [dataArr removeObject:model];
            }
        }
    }

最后的dataArr就是最终数组。

上一篇下一篇

猜你喜欢

热点阅读