创建对象
#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/