【知识总结】利用NSSet 过滤重复对象

NSObject协议中有两个用于判断对象等同性的方法

- (BOOL)isEqual:(Person *)object{}
- (NSUInteger)hash{}

例子:

#import 
@interface Person : NSObject
@property (nonatomic, strong) NSString *name;
@property (nonatomic, assign) int age;
@end

对象结构如上

确定等同性规则

1,age相同即为相等

实现两个等同性判断方法

必须同时实现两个方法,这样NSSet才能够判断是否相等

- (BOOL)isEqual:(Person *)object{
    return self.age == object.age? YES: NO;
}

- (NSUInteger)hash{
    NSString *toHashString = [NSString stringWithFormat:@"%d", self.age];
    return [toHashString hash];
}

实现了上面的两个方法,再往NSMutableSet对象中添加person对象时,如果age相同,就不会再继续添加到NSMutableSet对象中

@property (nonatomic, strong) NSMutableSet *set;
[self.set addObject:person];

判断NSSet中是否存在对象

if (![self.set containsObject:person]) {
}

向set中添加数组中的对象,如果set中存在相同的对象,则不添加到set中

[self.set addObjectsFromArray:arr];

值的注意的是,arr中如果存在相同的对象,也是不会重复添加到set中的

注意

1,NSSet/NSMutableSet是无序的,向其中添加对象,不会序列的排列
2,NSSet/NSMutableSet无法通过set[0] 方法读取对象

你可能感兴趣的:(【知识总结】利用NSSet 过滤重复对象)