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.以上所有的操作都不会修改原来集合中的内容,只会返回一个新的集合;


看官们,本章回的内容就介绍到这里,欲知后事如何且听下回分解!

Guess you like

Origin blog.csdn.net/talk_8/article/details/119393636