集合对象的关键字是NSSet与NSMutableSet。前者是不可变集合,后者是可变集合,Objective-C语言中大部分数据结构都存在可变与不可变两种数据。这里的集合很像Java语言与C语言中的Set,用法基本一样。但是在Objective-C语言中同一个集合可以储存不同对象的数据。下面分享一个例子就很清楚的看出。
1 2 //创建集合 3 NSSet *set = [NSSet setWithObjects:@"雨松MOMO",@"15810463139",[NSNumber numberWithInteger: 9527], nil]; 4 5 //集合的数量 6 int count1 = [set count]; 7 NSLog(@"集合中的数量: %d",count1); 8 9 //检测包含 10 NSString * str = @"雨松MOMO"; 11 if ([set containsObject:str]) { 12 NSLog(@"集合中包含 %@这个对象", str); 13 } 14 //检测包含 15 if ([set member:str]) { 16 17 NSLog(@"集合中包含 %@这个对象", str); 18 19 } 20 21 NSSet *set2 = [NSSet setWithObjects:@"雨松MOMO",@"15810463139",[NSNumber numberWithInteger: 9527], nil]; 22 NSSet *set3 = [NSSet setWithObjects:@"雨松MOMO",[NSNumber numberWithInteger: 9527], nil]; 23 NSSet *set4 = [NSSet setWithObjects:@"雨松MOMO",@"1875977",[NSNumber numberWithInteger: 5678], nil]; 24 25 if([set3 isSubsetOfSet:set]){ 26 27 NSLog(@"set2 is subset set"); 28 }else{ 29 NSLog(@"set2 is not subset set"); 30 } 31 32 if ([set4 intersectsSet:set]) { 33 NSLog(@" set4 中至少一个成员出现 在对象 set 中"); 34 }else{ 35 NSLog(@" set4 没有一个成员中出现 在对象 set 中"); 36 } 37 38 if([set2 isEqualToSet:set]){ 39 NSLog(@" set2 ==set "); 40 41 } 42 43 //迭代器遍历:为集合中所有的对象返回一个NSEnumerator对象。 44 NSEnumerator *enumerator = [set objectEnumerator]; 45 46 NSObject *object2 = [enumerator nextObject]; 47 48 while (object2 != nil) { 49 NSLog(@"迭代器遍历集合中的数据: %@",object2); 50 object2 = [enumerator nextObject]; 51 } 52 53 //快速枚举遍历 54 for (NSObject *object in set) { 55 NSLog(@"快速枚举遍历集合中的数据: %@",object); 56 } 57
输出:
2013-12-27 11:40:45.601 helloworld_20131023_Map[1153:c07] 集合中的数量: 3
2013-12-27 11:40:45.601 helloworld_20131023_Map[1153:c07] 集合中包含雨松MOMO这个对象
2013-12-27 11:40:45.602 helloworld_20131023_Map[1153:c07] 集合中包含雨松MOMO这个对象
2013-12-27 11:40:45.602 helloworld_20131023_Map[1153:c07] set2 is subset set
2013-12-27 11:40:45.603 helloworld_20131023_Map[1153:c07] set4 中至少一个成员出现在对象 set 中
2013-12-27 11:40:45.603 helloworld_20131023_Map[1153:c07] set2 ==set
2013-12-27 11:40:45.603 helloworld_20131023_Map[1153:c07] 迭代器遍历集合中的数据: 雨松MOMO
2013-12-27 11:40:45.604 helloworld_20131023_Map[1153:c07] 迭代器遍历集合中的数据: 15810463139
2013-12-27 11:40:45.604 helloworld_20131023_Map[1153:c07] 迭代器遍历集合中的数据: 9527
2013-12-27 11:40:45.605 helloworld_20131023_Map[1153:c07] 快速枚举遍历集合中的数据: 雨松MOMO
2013-12-27 11:40:45.605 helloworld_20131023_Map[1153:c07] 快速枚举遍历集合中的数据: 15810463139
2013-12-27 11:40:45.605 helloworld_20131023_Map[1153:c07] 快速枚举遍历集合中的数据: 9527
2.创建可变集合对象
1 //创建集合 2 NSMutableSet *set1 = [NSMutableSet setWithCapacity:10]; 3 4 //添加数据 5 [set1 addObject:@"雨松MOMO"]; 6 [set1 addObject:[NSNumber numberWithInt:9527]]; 7 8 //添加数据在删除 9 NSString *str1 = @"删除我"; 10 [set1 addObject:str1]; 11 //删除它 12 [set1 removeObject:str1]; 13 14 //快速枚举遍历 15 for (NSObject *object in set1) { 16 NSLog(@"快速枚举遍历集合中的数据: %@",object); 17 }
输出:
2013-12-26 15:32:36.309 helloworld_20131023_Map[1819:c07] 快速枚举遍历集合中的数据: 9527
2013-12-26 15:32:36.309 helloworld_20131023_Map[1819:c07] 快速枚举遍历集合中的数据: 雨松MOMO
各种数值: NSNumber:
可以使用对象来封装基本数值。
NSNumber 类来包装基本数据类型。
+ (NSNumber *)numberWithChar :(char)value ;
+ (NSNumber *)numberWithInt :(int )value ;
+ (NSNumber *)numberWithFloat :(float)value ;
+ (NSNumber *)numberWithBool :(BOOL)value ;
还有包括无符号版本和各种 long 型数据及 long long 整型数据
将一个基本类型封装到NSNumber 后,可以使用下列方法重新获得:
-
- (char)charValue;
-
- (int)intValue;
-
- (float)floatValue;
-
- (BOOL)boolValue;
-
- (NSString *)stringV alue;
1 //通常,将一个基本类型的数据包装成对象叫做装箱(boxing),从对象中取出基本数据类型叫做取消装箱(unboxing) 2 NSNumber *number =[NSNumber numberWithInt:123]; 3 int i=[number intValue]; 4 NSLog(@"the int value is %d",i);
输出:
2013-12-27 14:14:15.787 helloworld_20131023_Map[1506:c07] the int value is 123