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

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

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

例子:

#import <Foundation/Foundation.h>
@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] 方法读取对象
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容