Foundation框架中的静态集合
Posted talk_8
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Foundation框架中的静态集合相关的知识,希望对你有一定的参考价值。
看官们,我们在前面章回中介绍了Foundation框架中的数组,本章回中将介绍Foundation框架中的集合。
集合和数组比较类似,鉴于我们在前面章回中刚刚介绍完数组相关的知识,本章回中我们将采用对比的方法来介绍集合。集合和数组都表示多个对象存放在一起的容器,而且要求集合成员必须是对象类型,这点和数组一样,不过集合中的成员不像数组中的成员一样有固定的顺序,它们是无序的。还有一点不一样的是集合中元素不能相同,集合通过两个元素的哈希值是否相同来判断两个元素是否相同。
集合有两个分类:静态集合和动态集合,静态集合表示集合中的元素不可以被修改,反之可以修改的称为动态集合。这点和数组是一样的。静态集合使用NSSet类来表示,动态集合使用NSMutableSet类来表示。明白集合的概念和分类后,我们介绍与集合相关的操作。
集合初始化
集合的初始化和数组初始化类似,表示给集合中各个成员赋值。通常使用setWithObjects:方法来初始化集合。该方法会把参数中的各个对象赋值给集合,不过该方法有个要求:参数的最后一个对象必做是nil对象,而且该对象为不会赋值给集合。
查找集合中的某个对象
查找集合中的某个对象时需要使用containsObject:方法,该方法的参数是被查找的对象,该方法返回布尔类型的数值,通过判断该方法的返回值可以知道被查找元素是否在集合中。
向集合中添加某个对象
向集合中添加某个对象使用setByAddingObject:方法,该方法的参数是被添加的对象,如果参数中的对象与集合中某个对象相同,那么该对象不会被添加到集合中,反之不同的对象才能被添加到集合中,因为集合中不能有相同的对象。
遍历集合
遍历集合表示依次输出集合中的所有元素。我们不能像数组一样通过数组下标和循环来遍历集合,但是可以像数组一样使用枚举的方式来遍历集合。
此外,集合也提供了count方法来获取集合的大小,该方法没有参数,可以直接使用,这点和数组一样。
集合的复合操作
集合的复合操作主要包括:合并集合,判断两个集合是否有交集,判断集合是否是另外一个集合的子集,这些操作用到的方法如下:
setByAddingObjectsFromSet: //合并集合,如果合并后的集合中有重复元素,只保留一个
intersectsSet: //判断两个集合是否有交集,返回布尔值
isSubsetOfSet: //判断集合是否是另外一个集合的子集,返回布尔值
看官们,上面我们一直在介绍理论方面的知识,接下来我们介绍通过代码演示如何初始化集合以及集合相关的操作。下面是具体的代码:
#import <Foundation/Foundation.h>
int main()
{
//集合初始化
NSSet *set1 = [NSSet setWithObjects:@"one",[NSNumber numberWithInt:2],@123,nil];
NSLog(@"init set: %@",set1);
//查找集合中的某个对象
if([set1 containsObject:@"one"]) {
NSLog(@"'one' is contained in set");
}else {
NSLog(@"'one' is contained in set");
}
//遍历集合
for(id obj in set1) {
NSLog(@"%@",obj);
}
//向集合中添加了相同的元素,set2和se1的成员都一样
NSSet *set2 = [set1 setByAddingObject:@"one"];
NSLog(@"add 'one' in set: %@",set2);
//向集合中添加了不同的元素,set2和se1的成员不一样
set2 = [set1 setByAddingObject:@"two"];
NSLog(@"add 'two' in set: %@",set2);
NSSet *set3 = [set1 setByAddingObjectsFromSet:set2];
NSLog(@"merge two sets: %@",set3);
//判断两个集合是否有交集
if( [set1 intersectsSet: set2]) {
NSLog(@"set1 and set2 intersected");
}else {
NSLog(@"set1 and set2 don not intersected");
}
//判断一个集合是否是另外一个集合的子集
if([set1 isSubsetOfSet: set2]) {
NSLog(@"set1 is subSet of set2");
}else {
NSLog(@"set1 is not subSet of set2");
}
return 0;
}
在代码中我们添加了相关的注释,以方便大家理解代码。程序中集合的元素比较少,大家可以直接判断出运行结果,因此我们就不展示程序运行结果了,不过大家一定要自己动手是运行程序,一边分析代码,一边对比程序运行结果是否符合代码分析的结果。
最后我们对本章回的内容做一个总结:
- 1.集合中存放的元素没有次序,而且各个元素不能相同,集合通过两个元素的哈希值是否相同来判断两个元素是否相同;
- 2.使用setWithObjects:方法来初始化集合;
- 3.使用containsObject:方法查找集合中是否是否包含某个元素;
- 4.使用setByAddingObject:方法向集合中添加元素,不过添加的元素不能与集合中现有的元素相同;
- 5.遍历集合不能使用下标,只能使用枚举的方式遍历;
- 6.集合可以进行复合操作,主要包括:合并集合,判断集合是否有交集和判断集合是否为子集;
- 7.以上所有的操作都不会修改原来集合中的内容,只会返回一个新的集合;
看官们,本章回的内容就介绍到这里,欲知后事如何且听下回分解!
以上是关于Foundation框架中的静态集合的主要内容,如果未能解决你的问题,请参考以下文章