iOS 数据排重方案

排重.jpg

说明:本文只针对少量数据的排重的几种简单方案,暂不涉及海量数据.

简单结构的排重对象

1.利用 NSArray 的 containsObject 方法
NSMutableArray *arr = [NSMutableArray array];
    for (NSNumber *object in self.originArr) {
        if (![arr containsObject:object]) {
            [arr addObject:object];
        }
    }
self.originArr = [NSArray arrayWithArray:arr];
2.利用 NSDictionary 的 allValues 方法
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
    for (NSNumber *object in self.originArr) {
        [dic setObject:object forKey:object];
    }
NSArray *arr = [dic allValues];
self.originArr = [NSArray arrayWithArray:arr];
3.利用 NSSet 的 allObjects 方法
NSSet *set = [NSSet setWithArray:self.originArr];
NSArray *arr = [set allObjects];
self.originArr = [NSArray arrayWithArray:arr];
4.利用 KVC 的 valueForKeyPath 方法
NSArray *arr = [self.originArr valueForKeyPath:@"@distinctUnionOfObjects.self"];
self.originArr = [NSArray arrayWithArray:array];
5.正常排重,不打乱数组元素的顺序
NSMutableArray *arr = [[NSMutableArray alloc] init];
    for (int i = 0; i < self.originArr.count; i++){
        if ([arr containsObject:[self.originArr objectAtIndex:i]] == NO){
            [arr addObject:[self.originArr objectAtIndex:i]];
        }
    }
self.originArr = [NSArray arrayWithArray:arr];

复杂结构的排重对象可以通过特征值(id/createTime 等)排重

NSArray *array = @[@{@"name": @"iPhone5",
                         @"id": @(001)
                         },
                       @{@"name": @"iPhone5s",
                         @"id": @(001)
                         },
                       @{@"name": @"iPhoneSE",
                         @"id": @(002)
                         },
                       @{@"name": @"iPhone6",
                         @"id": @(003)
                         },
                       @{@"name": @"iPhone6",
                         @"id": @(003)
                         },
                       @{@"name": @"iPhone6s",
                         @"id": @(004)
                         },
                       @{@"name": @"iPhone7",
                         @"id": @(005)
                         },
                       @{@"name": @"iPadMini",
                         @"id": @(006)
                         },
                       @{@"name": @"iPhone8",
                         @"id": @(007)
                         },
                       ];
    
NSMutableArray *arr = [NSMutableArray array];
for (NSDictionary *dic in array) {
     ProductModel *model = [ProductModel mj_objectWithKeyValues:dic];
     [arr addObject:model];
}
self.originArr = [NSArray arrayWithArray:arr];
通过特征值 id 排重
NSMutableDictionary *flagDic = [NSMutableDictionary dictionary];
for (ProductModel *model in self.originArr) {
        [flagDic setObject:model forKey:[NSString stringWithFormat:@"%@", model.id]];
    }
self.originArr = [NSArray arrayWithArray:arr];
通过BOOL值标记
_peripheral = peripheral;

BOOL replace = NO;
// Match if we have this device from before
for (int i=0; i < _dataArr.count; i++) {
     Peripheral *p = [_dataArr objectAtIndex:i];
     if ([p isEqual:peripheral]) {
         [_dataArr replaceObjectAtIndex:i withObject:peripheral];
         replace = YES;
     }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 无序的去重 1.利用NSDictionary的AllKeys(AllValues)方法可以将NSArray中的元素...
    SkyMing一C阅读 4,277评论 0 7
  • http://blog.csdn.net/david21984/article/details/57451917 ...
    紫色冰雨阅读 655评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,500评论 19 139
  • 前言: 以下内容是作者在实际开发中所总结的,主要列举了一些实用小技巧,也希望在实际开发中能够帮到你。 设置控件的圆...
    暗香有独阅读 1,466评论 6 33
  • 请移步:https://blog.cdswyda.com/post/20171027
    依韵宵音阅读 602评论 0 1

友情链接更多精彩内容