数据去重(包括字符串,对象)

服务器获取到的数据 去重(包括字符串,对象)

1.字符串数组去重

1)利用NSDictionaryAllKeysAllValues)方法

NSArray *dataArray = @[@"2014-04-01",@"2014-04-02",@"2014-04-03",

                           @"2014-04-01",@"2014-04-02",@"2014-04-03",

                           @"2014-04-01",@"2014-04-03",@"2014-04-03",

                           @"2014-04-01",@"2014-04-02",@"2014-04-03",

                           @"2014-04-01",@"2014-04-02",@"2014-04-03",

                           @"2014-04-01",@"2014-04-02",@"2014-04-03",

                           @"2014-04-04",@"2014-04-06",@"2014-04-08",

                           @"2014-04-05",@"2014-04-07",@"2014-04-09",];

    NSMutableDictionary *dic = [[NSMutableDictionary alloc]initWithCapacity:0];

    for(NSString *str in dataArray)

    {

        [dic setValue:str forKey:str];

    }

    NSLog(@"%@",[dic allKeys]);

 

2)NSSetAllObjects方法(NSSet的特性(确定性、无序性、互异性),放入集合就自动去重了)

//无序

NSSet *set = [NSSet setWithArray:dataArray];
NSLog(@"%@",[set allObjects]);

 

//NSSet 有序化操作 : 1 2 3 4 5 同上面的"有序"

    NSOrderedSet *orderNumSet = [NSOrderedSet orderedSetWithArray:dataArray];

    NSLog(@"orderNumSet Array : %@",orderNumSet.array);

 

3)数组的containsObject来去除

NSMutableArray*listAry = [[NSMutableArrayalloc]init];

for(NSString*str indataArray) {

if(![listAry containsObject:str]) {

[listAry addObject:str];

}

 

}

 

NSLog(@"%@",listAry);

 

4)利用keyValue的方式

//无序

dataArray = [dataArray valueForKeyPath:@"@distinctUnionOfObjects.self"];

 

https://nshipster.cn/kvc-collection-operators/

 

2.自定义对象数组去重

也是想跟大家讨论的问题

除了循环遍历 对比每一个属性是否相同 还有什么更好的方法嘛?

1)NSMutableDictionary *dic = [NSMutableDictionary new];

for (RCMessage *localObj in localMessages) {

    [dic setObject:localObj forKey:[NSString stringWithFormat:@"%@%lld",localObj.senderUserId,localObj.sentTime]];

}

NSArray *keyArray = [dic allKeys];

for (NSString *key in keyArray) {

    [newArr addObject:[dic objectForKey:key]];

}

 

 

2)参考文章:https://nshipster.com/equality/

重写- (BOOL)isEqual:(id)object和- (NSUInteger)hash

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值