iOS 自定义对象数组去重

创建对象

#import <Foundation/Foundation.h>

@interface UpdateLocModel : NSObject

@property (nonatomic,assign) double lng;
@property (nonatomic,assign) double lat;

-(BOOL)isEqualToLocModel:(UpdateLocModel *)model;

@end

#import "UpdateLocModel.h"

@implementation UpdateLocModel

-(BOOL)isEqualToLocModel:(UpdateLocModel *)model{
    if (!model) {
        return NO;
    }
    
    BOOL haveEqualLat = (!self.lat && !model.lat) || self.lat == model.lat;
    BOOL haveEqualLng = (!self.lng && !model.lng) || self.lng == model.lng;
    
    return haveEqualLat&&haveEqualLng;
}

- (BOOL)isEqual:(id)object {
    if (self == object) {//对象本身
        return YES;
    }
    
    if (![object isKindOfClass:[UpdateLocModel class]]) {//不是本类
        return NO;
    }
    
    return [self isEqualToLocModel:(UpdateLocModel *)object];//必须全部属性相同 但是在实际开发中关键属性相同就可以
}

- (NSUInteger)hash {//hash比较 如果对象的属性是NSString等的对象 则需要用 ^运算逻辑异或
    return [self hash];
}

@end

test

    UpdateLocModel *model = [[UpdateLocModel alloc] init];
    model.lat = 1;
    model.lng = 2;
    [arrTest addObject:model];
    UpdateLocModel *model1 = [[UpdateLocModel alloc] init];
    model1.lat = 2;
    model1.lng = 1;
    [arrTest addObject:model1];
    UpdateLocModel *model2 = [[UpdateLocModel alloc] init];
    model2.lat = 1;
    model2.lng = 2;
    [arrTest addObject:model2];
    UpdateLocModel *model3 = [[UpdateLocModel alloc] init];
    model3.lat = 3;
    model3.lng = 4;
    [arrTest addObject:model3];
    UpdateLocModel *model4 = [[UpdateLocModel alloc] init];
    model4.lat = 3;
    model4.lng = 4;
    [arrTest addObject:model4];

    for (UpdateLocModel *model in [self getOutRepeatObjectFrom:arrTest]) {
        NSLog(@"lat %f lng %f",model.lat,model.lng);
    }

-(NSMutableArray *)getOutRepeatObjectFrom:(NSArray *)arr{
    NSMutableArray *needArr = [[NSMutableArray alloc]init];
    for (UpdateLocModel *model in arr) {
        __block BOOL isExist = NO;
        [needArr enumerateObjectsUsingBlock:^(UpdateLocModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            if ([obj isEqual:model]) {//数组中已经存在该对象
                *stop = YES;
                isExist = YES;
            }
        }];
        if (!isExist) {//如果不存在就添加进去
            [needArr addObject:model];
        }
    }
    
    return needArr;
}

控制台

GetOutRepeatTest[6794:3361115] lat 1.000000 lng 2.000000
GetOutRepeatTest[6794:3361115] lat 2.000000 lng 1.000000
GetOutRepeatTest[6794:3361115] lat 3.000000 lng 4.000000

参考

http://nshipster.com/equality/






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值