首页 > 代码库 > NSArray,NSDictionary,NSSet总结

NSArray,NSDictionary,NSSet总结

-学习笔记,以备以后查询大笑

------干货分割线-------------------

-NSArray
1、初始化、取值等基础操作     
     -NSArray 是不可变数组,一旦创建完成就不能够对数组进行,添加,删除等操作
     NSArray * array = [[NSArray alloc] init];
     NSArray * array1 = [NSArray                        arrayWithObjects:@"one",@"two",@"three", nil];   
     -在创建一个NSArray的时候最后一个元素一定是nil 不要把nil存到数组中,会导致数据丢失
     -数组实际上存储的时对象的地址,同样也可以存储数组的地址
     NSArray * a1 = [[NSArray alloc]     initWithObjects:@"one",@"two",@"three", nil];
     NSArray * a2 = [[NSArray alloc] initWithObjects:@"1",@"2",@"3", nil];
     NSArray * a3 = [[NSArray alloc] initWithObjects:a1,a2, nil];
     -创建数组的快捷方式
     NSArray * array = @[@"a",@"b",@"c"];
    -快速获得一个数组中的元素
    NSString * str = array[0];
     [array objectAtIndex:0];  数组的index从0开始
     [array count] 获得元素个数
    [array containsObject:p1] 判断数组中是否包含某个对象
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 = http://www.mamicode.com/[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 = http://www.mamicode.com/[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中不能够存储重复的数据,可以用它来去除重复的值
     NSString * str1 = @"one";
       NSString * str2 = @"two";
       NSString * str3 = @"three";
       NSSet * set = [[NSSet alloc] initWithObjects:str1,str2,str3,str1, nil];
     这样其实在set中指存储了 @“one”,@“two”,@“three” set.count 值为3
    [set containsObject:str1];  是否包含str1
2、遍历
    NSEnumerator * enumerator = [set objectEnumerator];
        NSString * value;
        while (value = http://www.mamicode.com/[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:@“."];

NSArray,NSDictionary,NSSet总结