iOS官方文档 Foundation篇---NSSet(NSMutableSet)

话九宸,挥袖风云尽,江山何沉?随逸兴,负手乾坤定,苍黄为轻。

——墨倾池

NSSet

静态无序的唯一对象集合(特点:集合不可修改,集合内元素无序,集合内元素不可重复);
当元素的顺序不重要时,可以使用集合作为数组的替代;

创建集合
//创建空集合
NSSet *set = [NSSet set];//输出:{()}

//创建单个元素集合
NSSet *set1 = [NSSet setWithObject:@"1"];//输出:{(1)}

//创建多个元素集合
NSSet *set2 = [NSSet setWithObjects:@"1",@"2",@"3",@"4",@"5", nil];//输出:{(3,1,4,2,5)}

//根据集合内元素个数创建集合
NSString *values[3];
values[0] = @"1";
values[1] = @"2";
values[2] = @"3";
NSSet *set4 = [NSSet setWithObjects:values count:2];//输出:{(1,2)}

//根据集合创建集合
NSSet *set5 = [NSSet setWithSet:set2];//(3,1,4,2,5)

//根据数组创建集合
NSArray *array = @[@"1",@"2",@"3",@"4",@"5",@"1",@"2"];
NSSet *set6 = [NSSet setWithArray:array];//输出:{(3,4,5,1,2)}
访问集合元素
//集合中元素总数
NSInteger count = set2.count;//输出:5

//返回集合中的一个元素
NSString *str1 = set2.anyObject;//输出:2

//确定元素是否存在于集合中,如果是,则返回该元素
NSString *str = [set2 member:@"2"];//输出:2

//表示集合内容的字符串,格式为属性列表。
NSString *str2 = set2.description;//输出:{((3,1,4,2,5))}
集合转数组
NSArray *arr = set2.allObjects;//输出:(3,1,4,2,5)
两个集合的关系
//返回一个布尔值,两个集合相同则返回YES
BOOL isEqual = [set2 isEqualToSet:set];//NO

//返回一个布尔值,指示接收集中的至少一个对象是否也存在于另一个给定集中(两集合至少一个相同元素)
BOOL isInter = [set2 intersectsSet:set1];//输出:YES

//返回一个布尔值,指示接收集中的每个对象是否也存在于另一个给定集中(set1是否是set2的子集)
BOOL isSubset = [set1 isSubsetOfSet:set2];//输出:YES
插入元素
//集合内添加给定元素并返回一个新的集合
NSSet *netSet = [set2 setByAddingObject:@"6"];

//集合内添加给定集合元素并返回一个新的集合
NSSet *netSet1 = [set2 setByAddingObjectsFromSet:set];

//集合内添加给定数组元素并返回一个新的集合
NSSet *newSet2 = [set2 setByAddingObjectsFromArray:array];
集合内每一个对象都会执行方法
//将给定选择器指定的消息发送到集合中的每个对象
[set2 makeObjectsPerformSelector:@selector(description)];
//将给定选择器指定的消息发送到集合中的每个对象,并携带参数
[set2 makeObjectsPerformSelector:@selector(hasPrefix:) withObject:@"1"];
//例如:
[self.view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
遍历集合
//正向遍历集合
NSEnumerator *enumerator = [set2 objectEnumerator];
NSString *objs;
while (objs = [enumerator nextObject]) {
  NSLog(@"集合正序值开始打印:%@\n",objs);
}

//常规遍历
[set2 enumerateObjectsUsingBlock:^(id  _Nonnull obj, BOOL * _Nonnull stop) {
  NSLog(@"obj = %@",obj);
}];

/*
 NSEnumerationOptions
 NSEnumerationConcurrent   //无序遍历
 NSEnumerationReverse      //倒序遍历
 */
//根据顺序遍历
[set2 enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id _Nonnull obj, BOOL * _Nonnull stop) {
  NSLog(@"obj = %@",obj);
  if ([obj isEqualToString:@"3"]) {
    //停止遍历
    *stop = YES;
  }
}];

//返回满足条件的集合
NSSet *newSet3 = [set2 objectsPassingTest:^BOOL(id  _Nonnull obj, BOOL * _Nonnull stop) {
  return [obj integerValue] > 2;
}];

//根据遍历顺序返回满足条件的集合
/*
 NSEnumerationOptions
 NSEnumerationConcurrent   //无序遍历
 NSEnumerationReverse      //倒序遍历
 */
NSSet *newSet4 = [set2 objectsWithOptions:NSEnumerationReverse passingTest:^BOOL(id  _Nonnull obj, BOOL * _Nonnull stop) {
  return [obj integerValue] > 2;
}];

NSMutableSet

动态无序的唯一对象集合,继承自NSSet(特点:集合可修改,集合内元素无序,集合内元素不可重复)

创建集合
NSArray *array = @[@"1",@"2",@"3",@"4",@"5",@"1",@"2"];
NSSet *set = [NSSet setWithObject:@"1"];//输出:{(1)}
NSMutableSet *mulSet = [NSMutableSet setWithObjects:@"1",@"2",@"3",@"4",@"5", nil];//输出:{(3,1,4,2,5)}
增加和删除元素
//集合增加单个元素
[mulSet addObject:@"6"];

//集合增加多个元素
[mulSet addObjectsFromArray:array];

//删除集合内单个元素
[mulSet removeObject:@"1"];

//删除集合内所有元素(清空)
[mulSet removeAllObjects];
两个集合的结合
//从接收集中删除不是另一个给定集的成员的每个对象(取交集)
[mulSet intersectSet:set];

//删除集合内相同的元素(取差集)
[mulSet minusSet:set];

//将另一个给定集合中的每个不存在与目标集合中的的对象添加到接收集和内(取并集)
[mulSet unionSet:set];

//清空接收集,然后添加另一个给定集中包含的每个对象。(完全替换)
[mulSet setSet:set];

欢迎留言指正,会持续更新!!!

你可能感兴趣的:(iOS官方文档 Foundation篇---NSSet(NSMutableSet))