NSSet是一个集合类,是储存对象的数组。
NSSet的特征:
1.内部的元素是无序的
2.元素不可以重复,会自动去重
3.执行的效率比NSArray高
NSMutableSet的特征:
1.可以增删,没有改
以下代码中介绍:
1.创建和初始化
2.它们的一些基本方法
1.NSSet创建和初始化
//1.1类方法创建,以nil结尾,表示数组结束,NSSet类会自动取出重复对象
NSSet *set1 = [NSSet setWithObjects:@1,@2,@3,@4,@1,@2, nil];
NSLog(@"%@",set1);//打印3,2,1,4 证明数组内部是无需的集合
NSLog(@"%zd",set1.count);//打印4 说明去掉重复的@1、@2
//1.2对象方法创建,以nil结尾,表示数组结束
NSSet *set2 = [[NSSet alloc] initWithObjects:@1,@2,@3,@4, nil];
NSLog(@"%@",set2);//打印3,2,1,4 证明数组内部是无需的集合
//1.3不能通过字面量创建,字面量创建只能只用于NSArray(错误的)
// NSSet *set3 = @[@1,@2,@3,@4];
// NSLog(@"%@",set3);
2.NSSet的方法
//******2.NSSet的方法
//2.1NSSet不再能通过索引的方式读取元素,因为它是无序的读取对象
// NSLog(@"%@",set1[1]); 错误的方法
//2.2判断是否包含某个元素
BOOL isHas = [set1 containsObject:@2];
if (isHas) {
NSLog(@"包含@2");
}
//2.3给数组去掉重复元素
//2.3.1创建一个有重复的数组
NSArray *array = @[@1,@2,@3,@4,@1,@2];
NSLog(@"%@",array);//打印 1,2,3,4,1,2
//2.3.2通过数组创建NSSet,自动去重
NSSet *set3 = [NSSet setWithArray:array];
NSLog(@"%@",set3);//打印3,2,1,4
//2.3.3通过set3赋值给array
array = [set3 allObjects];
NSLog(@"%@",array);//打印3,2,1,4
3.遍历数组
//******3.遍历NSSet的方法
//3.1使用增强for
for (NSNumber *num in set3) {
NSLog(@"%@",num);
}
//3.2使用block遍历
[set3 enumerateObjectsUsingBlock:^(id _Nonnull obj, BOOL * _Nonnull stop) {
NSLog(@"%@",obj);
}];
//3.3使用枚举器
NSEnumerator *setEnum = [set3 objectEnumerator];
NSNumber *num = [[NSNumber alloc] init];
while (num = [setEnum nextObject]) {
NSLog(@"%@",num);
}
NSMutableSet类的创建
//******1.NSMutableSet创建和初始化
//1.1创建
NSMutableSet *setM1 = [NSMutableSet set];//创建一个可变setM1
NSMutableSet *setM2 = [NSMutableSet setWithCapacity:10];//创建10个元素的setM2
//1.2初始化
// setM2.set = @[@1,@2,@3,@4,@1,@2]; 不能这样去初始化
NSSet *set = [NSSet setWithObjects:@1,@2,@3,@4, nil];
setM2.set = set;
NSLog(@"%@",setM2);
NSMutableSet的常用方法
//******2.常用方法
//2.1增加元素
[setM2 addObject:@5];
NSLog(@"%@",setM2);//打印5,1,2,3,4
//2.2删除元素
[setM2 removeObject:@4];
NSLog(@"%@",setM2);//打印5,1,2,3
//2.3删除所有元素
[setM2 removeAllObjects];
NSLog(@"%@",setM2);//打印