一.简介
NSSet 集合和数组(NSArray)相似,都是存储不同对象的地址;
不过 NSArray 是有序的集合,而 NSSet 是无序的集合;
其中,集合是一种哈希表,运用散列算法查找集合中的元素;
效率相对比起数组速率更快,但它没有顺序.
NSSet *set = [[NSSet alloc] initWithObjects:@"one",@"two",@"three",@"four", nil];
[set count];//返回集合中对象的个数
NSMutableSet *mSet = [NSMutableSet setWithCapacity:0];
注:若在设置时放入两个相同的元素,系统会自动删掉一个元素.
二.常用方法
1.判断集合中是否拥有某个元素 Element
//判断集合中是否拥有@“two”
BOOL ret = [setcontainsObject:@"two"];
2.判断两个集合是否相等
NSSet * set2 = [[NSSet alloc] initWithObjects:@"one",@"two",@"three",@"four", nil];//判断两个集合是否相等BOOL ret = [setisEqualToSet:set2];
3.判断 set 是否是 set2 的子集
NSSet * set2 = [[NSSet alloc] initWithObjects:@"one",@"two",@"three",@"four",@"five", nil];//判断set是否是set2的子集合BOOL ret = [setisSubsetOfSet:set2];
4.集合也可以用枚举器来遍历
//集合也可以用枚举器来遍历NSEnumerator * enumerator = [setobjectEnumerator];NSString *str;while(str =[enumerator nextObject]) {……}
5.通过数组来初始化集合(数组转为集合)
NSArray * array = [[NSArray alloc] initWithObjects:@"one",@"two",@"three",@"four", nil];NSSet *set= [[NSSet alloc] initWithArray:array];
6.集合转换为数组
NSArray * array2 = [setallObjects];
7.可变集合 NSMutableSet
//可变集合NSMutableSetNSMutableSet *set=[[NSMutableSet alloc] init];[setaddObject:@"one"];[setaddObject:@"two"];[setaddObject:@"two"];//如果添加的元素有重复,实际只保留一个
8.删除元素
//删除元素[setremoveObject:@"two"];[setremoveAllObjects];
9.将 set2 中的元素添加到 set 中来,若重复则保留一个
//将set2中的元素添加到set中来,如果有重复,只保留一个NSSet * set2 = [[NSSet alloc] initWithObjects:@"two",@"three",@"four", nil];[setunionSet:set2];
10.删除 set 中与 set2 相同的元素
[setminusSet:set2];
11.指数集合(索引集合)NSIndexSet
//指数集合(索引集合)NSIndexSetNSIndexSet * indexSet = [[NSIndexSet alloc] initWithIndexesInRange:NSMakeRange(1,3)];//集合中的数字是123
12.根据集合提取数组中指定位置的元素
//根据集合提取数组中指定位置的元素NSArray * array = [[NSArray alloc] initWithObjects:@"one",@"two",@"three",@"four", nil];NSArray * newArray = [array objectsAtIndexes:indexSet];//返回@"two",@"three",@"four"
13.可变指数集合 NSMutableIndexSet
NSMutableIndexSet *indexSet =[[NSMutableIndexSet alloc] init];[indexSet addIndex:0][indexSet addIndex:3];[indexSet addIndex:5];//通过集合获取数组中指定的元素NSArray *array = [[NSArray alloc] initWithObjects:@"one",@"two",@"three",@"four",@"five",@"six", nil];NSArray *newArray = [array objectsAtIndexes:indexSet];//返回@"one",@"four",@"six"