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] 方法读取对象