一、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