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
就是最终数组。