NSArray,NSDictionary,NSSet用法及区别

来源:互联网 发布:工口mmd动作数据 编辑:程序博客网 时间:2024/06/03 17:45

    NSString * str1 =@"one";

    NSString * str2 =@"two";

    NSString * str3 =@"three";    

-NSArray
1、初始化、取值等基础操作     
     NSArray 是不可变数组,一旦创建完成就不能够对数组进行,添加,删除等操作
    

   NSArray * array1 = [NSArrayarrayWithObjects:str1,str2,str3,str1,nil];

     在创建一个NSArray的时候最后一个元素一定是nil 不要把nil存到数组中,会导致数据丢失
   
     创建数组的快捷方式
     NSArray * array = @[@"a",@"b",@"c"];
 
2、遍历数组
    a、普通的for循环
        for (int i = 0; i < array.count; i++)
        {
            NSString * str = array[i];
            NSLog(@"array[%d] = %@",i,str);
        }
    b、使用增强for循环的方式遍历数组
        for (NSString * str in array)
        {
            NSLog(@"str = %@",str);
        }
    c、枚举器
        NSArray * array = @[@"one",@"two",@"three"];
        NSEnumerator * enumerator =  [array objectEnumerator];
        NSString * value;
        while (value = [enumerator nextObject]) {
            NSLog(@"enum str %@",value);
        }
3、数组排序
    a、使用sortedArrayUsingSelector
    [array sortedArrayUsingSelector:@selector(compare:)]  
    b、使用block方式排序
     array2 = [array2 sortedArrayUsingComparator:^NSComparisonResult(id             obj1, id obj2) {
            
            /*
            NSComparisonResult result = [obj1 compare:obj2];
            
            return result;
             */
            //obj1 compare obj2 就是正序排序
         //return [obj1 compare:obj2];
            //obj2 compare obj1 就是倒序排序
            return [obj2 compare:obj1];
        }];
     如果你向给你自己定义的对象排序,必须根据某一个属性来排序,
     sortDescriptorWithKey 参数要的就是你对象中,要依据哪个属性来排序,你就把哪个属性的名字当成key传入
      ascending YES表示正序 NO表示倒叙
      NSSortDescriptor * d1 = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:NO];
      NSSortDescriptor * d2 = [NSSortDescriptor sortDescriptorWithKey:@"year" ascending:NO];
        
     如果你要使用多个属性进行排序,默认在前面的NSSortDescriptor优先级比较高
        NSArray * description = @[d2,d1];
        
        array3 = [array3 sortedArrayUsingDescriptors:description];
4、可变数组NSMutableArray
    创建可变数组
    NSMutableArray * array = [[NSMutableArray alloc] initWithCapacity:0];
    -使用addObject 动态给数组中增加元素
    [array addObject:@“one"];
    -数组中可以存储,同一个对象多次
    -指定对象插入的位置
     [array insertObject:str1 atIndex:2];
    -删除 会通过对象,删除数组中所有的同一个地址的对象
    [array removeObject:str1];
    -通过索引的方式删除对象,超出了数组的count值,那么就会导致异常 index beyond bounds
    [array removeObjectAtIndex:0];
    [array removeAllObjects];
-NSDictionary
1、初始化
    -创建字段,不可变的
      NSDictionary * dic = [NSDictionary dictionaryWithObjectsAndKeys:@"s",@"name", nil];
    -快捷创建方式
      NSDictionary * dic2 = @{ @"one":@"1",@"two":@"2"};
      dic2.count  获得字典长度
2、遍历
       NSArray * keys = [dic3 allKeys];
        for (int i = 0; i < keys.count; i++)
        {
            NSString * key = [keys objectAtIndex:i];
            
            //如果你的字典中存储的多种不同的类型,那么最好用id类型去接受它
            id obj  = [dic3 objectForKey:key];
            NSLog(@"obj %@",obj);
        }
      —枚举器
        NSEnumerator * enumerator =  [dic3 objectEnumerator];
        id value;
        while (value = [enumerator nextObject]) {
            NSLog(@"value %@",value);
        }
3、可变字典NSMutableDictionary
    -创建一个可变长度字典
      NSMutableDictionary * muDic = [[NSMutableDictionary alloc] initWithCapacity:0];
    -向字典中村如数据
     [muDic setObject:@"1" forKey:@"one"];
    -删除
     [muDic removeObjectForKey:@“one"];
    -全部删除
     [muDic removeAllObjects];
-NSSet
1、NSSet是无序的
     注意:这个是最为重要的功能NSSet中不能够存储重复的数据,可以用它来去除重复的值
     

   NSSet * set1 = [[NSSetalloc] initWithObjects:str1,str2,str3,str1,nil];

     这样其实在set中指存储了 @“one”,@“two”,@“three” set.count 值为3 【看最下面实例】

2、遍历
    NSEnumerator * enumerator = [set objectEnumerator];
        NSString * value;
        while (value = [enumerator nextObject]) {
            NSLog(@"value %@",value);
        }
3、可变集合NSMutableSet
    -创建一个可变集合
      NSMutableSet * muSet = [[NSMutableSet alloc] init];
    -增加值
      [muSet addObject:str1];
    -删除
      [muSet removeObject:str1];
    -删除所有
    [muSet removeAllObjects];

-集合之间相互转换
1.NSArray 转换成 NSMutableArray
    NSArray * array = @[@"one",@"two",@"three"];
      NSMutableArray * muArray = [NSMutableArray arrayWithArray:array];
2.NSDictionary 转换成        NSMutableDictionary
    NSDictionary * dic = @{@"one":@"1",@"two":@"2"};
      NSMutableDictionary * muDic = [NSMutableDictionary     dictionaryWithDictionary:dic];
3.NSSet 转换成 NSMutableSet
    NSSet * set = [[NSSet alloc] initWithObjects:@"one",@"two", nil];
      NSMutableSet *muSet = [NSMutableSet setWithSet:set];
4.NSArray 转换成NSSet
      NSMutableSet * muSet2 = [NSMutableSet setWithArray:array];
5.NSDictionary 转化成NSArray
        NSArray * keys = [dic allKeys];
        NSArray * values = [dic allValues];
6.字符串转换成数组
        NSString * str = @"aa.bb.cc";
        NSArray * strArray =[str componentsSeparatedByString:@“."];



实例:

    NSString * str1 = @"one";

    NSString * str2 =@"two";

    NSString * str3 =@"three";

    

    //数组 不可变

    NSArray * array1 = [NSArrayarrayWithObjects:str1,str2,str3,str1,nil];

    NSLog(@"数组 不可变 array1 count: %ld",[array1count]);

    NSLog(@"数组 不可变内容: %@",array1);

    

    //集合 不可变

    NSSet * set1 = [[NSSetalloc] initWithObjects:str1,str2,str3,str1,nil];

    NSLog(@"集合 不可变 array1 count: %ld",[set1count]);

    NSLog(@"集合 不可变内容: %@",set1);

    

    

    //数组 可变

    NSMutableArray * array2 = [NSMutableArraynew];

    [array2 addObject:str1];

    [array2 addObject:str2];

    [array2 addObject:str3];

    [array2 addObject:str1];

    NSLog(@"数组 可变 array1 count: %ld",[array2count]);

    NSLog(@"数组 可变内容: %@",array2);

    

    //集合 可变

    NSMutableSet * set2 = [[NSMutableSetalloc] init];

    [set2 addObject:str1];

    [set2 addObject:str2];

    [set2 addObject:str3];

    [set2 addObject:str1];

    NSLog(@"集合 可变 array1 count: %ld",[set2count]);

    NSLog(@"集合 可变内容: %@",set2);

    

    

    //数组转集合

    NSMutableSet * set3 = [NSMutableSetsetWithArray:array1];

    NSLog(@"数组转集合 内容: %@",set3);


输出日志:

2017-10-10 17:22:02.651060+0800 setAndArray[1558:84219] 数组 不可变 array1 count: 4

2017-10-10 17:22:02.651173+0800 setAndArray[1558:84219] 数组 不可变内容: (

    one,

    two,

    three,

    one

)

2017-10-10 17:22:02.651213+0800 setAndArray[1558:84219] 集合 不可变 array1 count: 3

2017-10-10 17:22:02.651269+0800 setAndArray[1558:84219] 集合 不可变内容: {(

    one,

    three,

    two

)}

2017-10-10 17:22:02.651289+0800 setAndArray[1558:84219] 数组 可变 array1 count: 4

2017-10-10 17:22:02.651325+0800 setAndArray[1558:84219] 数组 可变内容: (

    one,

    two,

    three,

    one

)

2017-10-10 17:22:02.651345+0800 setAndArray[1558:84219] 集合 可变 array1 count: 3

2017-10-10 17:22:02.651372+0800 setAndArray[1558:84219] 集合 可变内容: {(

    one,

    two,

    three

)}


//装换成集合后  自动去除重复值的对象

2017-10-10 17:08:23.366852+0800 setAndArray[1415:73533] 数组转集合 内容: {(

    one,

    three,

    two

)}


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 蒸馒头没有屉布怎么办 电炖锅水不沸腾怎么办 掉了一颗虎牙,怎么办 牙里面掉了一块怎么办 u盘坏了无法识别怎么办 u盘内容读不出来怎么办 u盘文件读不出来怎么办 u盘突然读不出来怎么办 u盘读取不出来怎么办 蛋糕卷底部粘纸怎么办 美瞳没有护理液怎么办 没有带护理液了怎么办 护理液忘记带了怎么办 康宁玻璃锅裂了怎么办 带隐形牙套喝酒怎么办 牙齿保持器丢了怎么办 牙套保持器坏了怎么办 牙齿磕掉了一小块怎么办 牙齿裂掉了一半怎么办 大牙缺了一小块怎么办 牙根碎了一小块怎么办 门牙碎了一小块怎么办 孩子门牙长歪了怎么办 儿童门牙长歪了怎么办 大门牙长歪了怎么办 下面牙齿长歪了怎么办 只有一颗牙齿歪怎么办 牙齿突然长歪了怎么办 有个牙齿长歪了怎么办 一颗大牙长歪了怎么办 一颗牙齿长偏了怎么办 一个门牙长歪了怎么办 儿童牙齿长歪了怎么办 孩子牙齿长歪了怎么办 宝宝门牙长歪了怎么办 一颗牙齿挤歪了怎么办 后槽牙掉了一块怎么办 最里面的牙掉了怎么办 成年了牙齿掉了怎么办 我的门牙豁牙子怎么办 小孩牙齿长得稀怎么办