zoukankan      html  css  js  c++  java
  • objective-c 集合对象 (7)

    集合对象的关键字是NSSet与NSMutableSet。前者是不可变集合,后者是可变集合,Objective-C语言中大部分数据结构都存在可变与不可变两种数据。这里的集合很像Java语言与C语言中的Set,用法基本一样。但是在Objective-C语言中同一个集合可以储存不同对象的数据。下面分享一个例子就很清楚的看出。

     
    1. 创建不可变集合对象
     
    [NSNumber numberWithInteger:9527]; 因为集合中只能存放对象,所以如果要存数字的话要把数字转换成对象方可存入。
    [NSSet setWithObjects:...]:创建集合对象,并且初始化集合中的数值,结尾必需使用nil标志。
    [set count] ; 得到这个结合对象的长度。
    [set containsObject:...]: 判断这个集合中是否存在传入的对象,返回Bool值。
    [set objectEnumerator]: 将集合放入迭代器。
    [enumerator nextObject]:得到迭代器中的下一个节点数据,使用while遍历这个迭代器,方可遍历集合对象中的对象。
    [set isEqualToSet:objset]:判断两个集合是否完全相等,返回Bool值。
    [set isSubsetOfSet:objset]:判断集合中的所有数据是否都相等与objeset集合中,返回Bool值。
    [set istersectSet:objset]:判断集合中的至少有一个数据相等与objeset集合中,返回Bool值。
     
     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.创建可变集合对象

     
     
    NSMutableSet 继承NSSet ,所以可以使用父类的方法。
     
    [NSMutableSet setWithCapacity:10]:创建可变集合对象,并且初始化长度为10。
    [set addObject: obj] : 向集合中动态的添加对象。
    [set removeObject:obj]:删除集合中的一个对象。
    [set removeAllObjects]:删除集合中的所有对象。
    [set unionSet:obj]:向集合中添加一个obj集合的所有数据。
    [set minusSet:obj]:向集合中删除一个obj集合的所有数据。
    [set intersectSet]:向集合中删除一个不包含obj集合的所有数据。
     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

  • 相关阅读:
    iaas,paas,saas理解
    July 06th. 2018, Week 27th. Friday
    July 05th. 2018, Week 27th. Thursday
    July 04th. 2018, Week 27th. Wednesday
    July 03rd. 2018, Week 27th. Tuesday
    July 02nd. 2018, Week 27th. Monday
    July 01st. 2018, Week 27th. Sunday
    June 30th. 2018, Week 26th. Saturday
    June 29th. 2018, Week 26th. Friday
    June 28th. 2018, Week 26th. Thursday
  • 原文地址:https://www.cnblogs.com/aosting/p/3492581.html
Copyright © 2011-2022 走看看