• 【iOS系列】-oc中的集合类


    OC中的集合有:NSArray 数组 NSDictionary 字典 NSSet 集合

    第一:NSArrary

    1.1:集合的基本方法

    //1.创建集合
    //NSArray 是不可变数组,一旦创建完成就不能够对数组进行,添加,删除等操作
    NSArray * array = [[NSArray alloc] init];

      //2.通过构造方法的方式创建一个NSArray
      //在创建一个NSArray的时候,集合的最后一个元素一定是nil,判断nil决定集合的结尾
    NSArray * array1 = [NSArray arrayWithObjects:@"one",@"two",@"three", nil];
    NSArray * array2 = [[NSArray alloc] initWithObjects:@"one",@"two",number, nil];
    NSArray * karray = @[@"a",@"b",@"c"];
    NSString * kstr = karray[0];//访问元素位置
    //数组的index时从0开始的
    NSString * str = [array objectAtIndex:0];
    NSLog(@"str %@",str);
    //获得数组的元素个数
    NSUInteger arrayCount = [array count];
    // 判断数组中是否存在某个对象
    BOOL isContain = [array containsObject:id];
    

    特性:
    1.数组中可以存储不同类型的对象
    2.数组实际上存储的时对象的地址,同样也可以存储数组的地址
    3.存储自定义的对象 (最好都给我重写 description方法)
    4.数组中存储基本数据类型, (如果你要在数组中存储基本数据类型,请包装好了之后再去存 NSNumber)
    5.注意不要把nil值存储到NSArray中,会导致数据丢失

    1.2:数组排序:

    1.使用sortedArrayUsingSelector
    NSArray * array = @[@"b",@"d",@"a",@"z"];
    array = [array sortedArrayUsingSelector:@selector(compare:)];
    
    2.使用block方式排序
    array2 = [array2 sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
         //obj1 compare obj2 就是正序排序
         //obj2 compare obj1 就是倒序排序
         return [obj2 compare:obj1];
    }];
    

    3.使用自定义对象排序 :如果你向给你自己定义的对象排序,必须根据某一个属性来排序,

    //sortDescriptorWithKey 参数要的就是你对象中,要依据哪个属性来排序,你就把哪个属性的名字当成key传入
    //ascending YES表示正序 NO表示倒叙
    NSSortDescriptor * d1 = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:NO];
    NSSortDescriptor * d2 = [NSSortDescriptor sortDescriptorWithKey:@"year" ascending:NO];
           
    //如果你要使用多个属性进行排序,默认在前面的NSSortDescriptor优先级比较高
    NSArray * descripts = @[d2,d1];
           
    array3 = [array3 sortedArrayUsingDescriptors:descripts];
    

    1.3:可变数组:

      //1.创建可变数组
    NSMutableArray * array = [[NSMutableArray alloc] initWithCapacity:0];
    
    //1.数组中加入元素
    [array addObject:str1];
    //2.指定对象插入的位置
    [array insertObject:str1 atIndex:2];
    
    //3.删除 会通过对象,删除数组中所有的同一个地址的对象
    [array removeObject:str1];
    
    //4.通过索引的方式删除对象,超出了数组的count值,那么就会导致异常 index beyond bounds
    [array removeObjectAtIndex:0];
    
    [array addObject:str2];
    [array addObject:str3];
    [array addObject:str1];
    
    //5.删除数组中所有的元素
    [array removeAllObjects];
    

    第二:NSDictionary

    第一:NSDictionary
    字典是以键值对的形式来存储数据 key value
    字典的顺序不是按照存储时候的顺序。
    字典中可以存任意数据类型

    //1.创建字段,不可变的
    NSDictionary * dic = [NSDictionary dictionaryWithObjectsAndKeys:@"apple",@"name", nil];
           
    //2.快捷创建方式
    NSDictionary * dic2 = @{ @"one":@"1",@"two":@"2"};
    
    //4.获得字典的长度
    dic.count
           
    //5.从字典中取值
    NSString * str  = [dic3 objectForKey:@"one"];
    
    //6.遍历
    //6.1取出所有的key值
    NSArray * allkeys = [dic3 allKeys];
           
    for (int i = 0; i < allkeys.count; i++)
    {
       NSString * key = [allkeys objectAtIndex:i];
               
       //如果你的字典中存储的多种不同的类型,那么最好用id类型去接受它
       id obj  = [dic3 objectForKey:key];
    }
    
      //6.2.枚举器
     NSEnumerator * enumerator =  [dic3 objectEnumerator];
    id value;
    while (value = [enumerator nextObject]) {
          NSLog(@"value %@",value);
    }
    

    第三:NSSet

    //NSArray 自然顺序
    //NSSet是无序的
    //注意:这个是最为重要的功能 NSSet中不能够存储重复的数据,可以用它来去除重复的值

      //创建
    NSString * str1 = @"one";
    NSString * str2 = @"two";
    NSString * str3 = @"three";
    NSSet * set = [[NSSet alloc] initWithObjects:str1,str2,str3,str1, nil];
     //4.遍历
     NSEnumerator * enumerator = [set objectEnumerator];
    NSString * value;
    while (value = [enumerator nextObject]) {
        NSLog(@"value %@",value);
    }
    
    //1 创建可变集合NSMutableSet
    NSMutableSet * muSet = [[NSMutableSet alloc] init];
           
    //2.增加值
    [muSet addObject:str1];
    
    //3.删除
    [muSet removeObject:str1];
    
    //4.删除所有
    [muSet removeAllObjects];
    
    //5.遍历
    NSEnumerator * en = [muSet objectEnumerator];
    NSString * value;
    while (value = [en nextObject]) {
       NSLog(@"value %@",value);
    }
    

    综合:集合相互转换

    //1.NSArray 转换成 NSMutableArray
    NSArray * array = @[@"one",@"two",@"three"];
    NSMutableArray * muArray = [NSMutableArray arrayWithArray:array];
    NSLog(@"muarray %@",muArray);
    
    //2.NSDictonary 转换成        NSMutableDictionary
    NSDictionary * dic = @{@"one":@"1",@"two":@"2"};
    NSMutableDictionary * muDic = [NSMutableDictionary dictionaryWithDictionary:dic];
    NSLog(@"mudic %@ ",muDic);
    
    //3.NSset 转换成 NSMutableSet
    NSSet * set = [[NSSet alloc] initWithObjects:@"one",@"two", nil];
    NSMutableSet *muSet = [NSMutableSet setWithSet:set];
    NSLog(@"muSet %@",muSet);
    
    
    //4.NSArray 转换成NSSet
    NSMutableSet * muSet2 = [NSMutableSet setWithArray:array];
    NSLog(@"muSet2 %@",muSet2);
    
    
    //5.NSDictionary 转化成NSArray
    NSArray * allkeys = [dic allKeys];
    NSLog(@"allkeys %@",allkeys);
    NSArray * allValues = [dic allValues];
    NSLog(@"allValues %@",allValues);
    
    //6.字符串转换成数组
    NSString * str = @"www.itacast.cn";
    NSArray * strArray =        [str componentsSeparatedByString:@"."];
    NSLog(@"strArray %@",strArray);
  • 相关阅读:
    linux install zh_CN(ubuntu)
    gitweb随记
    gitolite随记
    gitosis随记
    python
    zsh-替换掉黑白的控制台
    Homebrew -- Mac软件管家(套件管理yun……)
    mac中遇到的mysql编码问题
    策略模式 -- 山不转水转
    WPF教程:附加属性
  • 原文地址:https://www.cnblogs.com/fengtengfei/p/4319372.html
Copyright © 2020-2023  润新知