一、NSSet概念
1. NSSet 和 NSArray 类似,都是存储元素的集合,只不过 NSArray 是顺序存储(在内存上是连续的),而 NSSet 是无序存储(在内存上是不连续的) 2. NSSet 的查找速率比 NSArray 更快 3. NSSet 的继承关系如下
二、NSSet的常用方法
1. 创建 NSSet 对象
+(instancetype)set;
+(instancetype)setWithObject:(ObjectType)anObject;
+(instancetype)setWithObjects:(ObjectType)firstObj, ...;
+(instancetype)setWithArray:(NSArray<ObjectType>*)array;
+(instancetype)setWithSet:(NSSet<ObjectType>*)set;
-(NSSet<ObjectType>*)setByAddingObject:(ObjectType)anObject;
-(NSSet<ObjectType>*)setByAddingObjectsFromArray:(NSArray<ObjectType>*)otherArray;
-(NSSet<ObjectType>*)setByAddingObjectsFromSet:(NSSet<ObjectType>*)otherSet;
/*
+(instancetype)set;
创建一个空的 NSSet 对象
*/
NSSet * set_1 = [NSSet set];
NSLog(@"set_1 is %@", set_1);
/*
+ (instancetype)initWithObject:(ObjectType)anObject;
创建并包含一个指定元素的 NSSet 对象
*/
NSSet * set_2 = [NSSet setWithObject:@"ShangHai"];
NSLog(@"set_2 is %@", set_2); // ShangHai
/*
+(instancetype)setWithObjects:(ObjectType)firstObj, ...;
创建并包含 指定元素列表的 NSSet 对象
*/
NSSet * set_3 = [NSSet setWithObjects:@"ShangHai", @"BeiJing", nil];
NSLog(@"set_3 is %@", set_3); // ShangHai, BeiJing
/*
+(instancetype)setWithArray:(NSArray<ObjectType>*)array;
创建并返回 包含指定 NSArray 对象元素的 NSSet 对象
*/
NSSet * set_4 = [NSSet setWithArray:[NSArray arrayWithObjects:@"HuNan", @"HuBei", @"TianJin", nil]];
NSLog(@"set_4 is %@", set_4); // HuNan, HuBei, TianJin
/*
+(instancetype)setWithSet:(NSSet<ObjectType>*)set;
创建并返回 包含指定 NSSet 对象元素的 NSSet 对象
*/
NSSet * set_5 = [NSSet setWithSet:set_4];
NSLog(@"set_5 is %@", set_5); // HuNan, HuBei, TianJin
/*
-(NSSet<ObjectType>*)setByAddingObject:(ObjectType)anObject;
将 set_5 对象中添加指定元素并返回一个新的 NSSet 对象
*/
NSSet * set_6 = [set_5 setByAddingObject:@"JiangSu"];
NSLog(@"set_6 is %@", set_6); // HuNan, HuBei, TianJin, JiangSu
/*
-(NSSet<ObjectType>*)setByAddingObjectsFromArray:(NSArray<ObjectType>*)otherArray;
将 set_6 对象中添加指定 NSSet 对象的元素,并返回一个新的 NSSet 对象
*/
NSSet * set_7 = [set_6 setByAddingObjectsFromSet:set_3];
NSLog(@"set_7 is %@", set_7); // HuNan, HuBei, TianJin, JiangSu, ShangHai, BeiJing
/*
-(NSSet<ObjectType>*)setByAddingObjectsFromSet:(NSSet<ObjectType>*)otherSet;
将 set_6 对象中添加指定 NSArray 对象的元素,并返回一个新的 NSSet 对象
*/
NSSet * set_8 = [set_6 setByAddingObjectsFromArray:[NSArray arrayWithObjects:@"ZheJiang", @"FuJian", nil]];
NSLog(@"set_8 is %@", set_8); // HuNan, HuBei, TianJin, JiangSu, ZheJiang, FuJian
2. 初始化 NSSet 对象
-(instancetype)initWithArray:(NSArray<ObjectType>*)array;
-(instancetype)initWithObjects:(ObjectType)firstObj, ...;
-(instancetype)initWithSet:(NSSet<ObjectType>*)set;
-(instancetype)initWithSet:(NSSet<ObjectType>*)set copyItems:(BOOL)flag;
/*
-(instancetype)initWithArray:(NSArray<ObjectType>*)array;
用指定的 NSArray 对象中的元素初始化 NSSet 对象
*/
NSSet * set_1 = [[NSSet alloc] initWithArray:[NSArray arrayWithObjects:@"XiZang", @"XinJiang", nil]];
NSLog(@"set_1 is %@", set_1); // XiZang, XinJiang
/*
-(instancetype)initWithObjects:(ObjectType)firstObj, ...;
用指定对象列表初始化 NSSet 对象
*/
NSSet * set_2 = [[NSSet alloc] initWithObjects:@"GuangDong", @"ShanDong", nil];
NSLog(@"set_2 is %@", set_2); // GuangDong, ShanDong
/*
-(instancetype)initWithSet:(NSSet<ObjectType>*)set;
用指定 NSSet 对象中的元素初始化 NSSet 对象
*/
NSSet * set_3 = [[NSSet alloc] initWithSet:set_2];
NSLog(@"set_3 is %@", set_3); // GuangDong, ShanDong
/*
-(instancetype)initWithSet:(NSSet<ObjectType>*)set copyItems:(BOOL)flag;
用指定 NSSet 对象中的元素初始化 NSSet 对象,并对每一个对象进行深拷贝
*/
NSSet * set_4 = [[NSSet alloc] initWithSet:set_3 copyItems:YES];
NSLog(@"set_4 is %@", set_4); // GuangDong, ShanDong