zoukankan      html  css  js  c++  java
  • ios NSArray / NSMutableArray

    NSArray

    放任何OC类的对象,不允许放基本数据类型,数组里面是id指针,id指针只能指向OC类的对象


    1. 创建方法:(5)
    NSArray *a = [NSArray array]; //调用工厂方法来初始化,空数组,没有任何意义
    NSArray *a1 = [NSArray arrayWithObject:@"one"]; //只有一个元素的数组,意义不大,可以用一个对象就可以
    NSArray *a2 = [NSArray arrayWithObjects:@"one", @"tow",@"three",nil]; //可以有多个元素,nil不可以丢,标志数组元素结束,就如/0一样
    NSArray *a3 = @[@"one",@"tow",@"three"]; //优化后的方法,最常用
    NSArray *a4 = [NSArray arrayWithArray:a3]; //生成副本
    
    2. 数组的属性:
    array.count  //求数组元素个数 
    
    3. 根据下标取数组值:(单个)
    NSString *str = [a4 objectAtIndex:2];//求数组指定下标对应的元素值   优化后可以用C中数组表示NSLog(@"%@", a4[2]);(越界就会导致程序崩溃)
    str = [a4 lastObject];  =》 str = a4 [ a4. count -1 ] ;  //取最后一个元素
    str = [a4 firstObject]; =》 str = [a4 objectAtIndex:0]; //取第一个元素
    
    
    4. 根据元素值求下标:
    NSUInteger index = [a4 indexOfObject:@"three"];  //越界后就是一个无比大的值
    防止越界:
    if (index >= a4[a4.count - 1]) {
         NSLog(@“元素不存在”);
    }else{
          NSLog(@"%lu", index);
     }
    
    5. 数组的遍历:(显示,满足条件输出。。。。)
    NSLog(@"%@",array6);  //直接输出
    
    //面向过程(?还是对象)的循环,只用于遍历
    for (NSString *s in array6) {
         NSLog(@"%@", s);
    }
    
    //满足条件输出
    NSArray *array6 = @[@"one",@"tow",@"three",@"one"];
        for (NSString *str in array6) {
            if ([str isEqualTo:@"one"] == YES) {
                NSLog(@"%@", str);
             }
        }
    
    6. 数组排序三部曲:
    1. 创建数组:
        NSArray *array = @[i1, i2, i3, i4, i5];
    2. 写一个方法:实例方法
      //格式,排序规则(声明并实现)
      -(NSComparisonResult) compareInterger:(TRInterger *)other{    //枚举:NSComparisonResult,里面有3个参数
        if ( self.interger > other.interger ) {
            return NSOrderedAscending;  //升序
        }
        else if (  self.interger <  other.interger ){
            return NSOrderedDescending;  //降序
        }
        else{
            return NSOrderedSame;  //相等
        }
    }
    3. 调用: //升序与降序完全取决于规则
      NSArray *sorted = [array sortedArrayUsingSelector:@selector(compareInterger:)];
    
    
    拼音排序:
    (补充)
    -(NSComparisonResult)compareName:(TRStudent *)other{
        return [self.pinYin compare:other.pinYin]; // compare:调用方法
        }
    //转为拼音
            NSMutableString *str = [NSMutableString stringWithString:@"计算机语言"];
            if (CFStringTransform((__bridge CFMutableStringRef)str, 0, kCFStringTransformMandarinLatin, NO))
            {
                NSLog(@"%@", str);
            }
            if (CFStringTransform((__bridge CFMutableStringRef)str, 0, kCFStringTransformStripDiacritics, NO))
            {
                NSLog(@"%@", str);
            }
    
    副本当中的数组元素,深浅拷贝生成方法:采纳协议<NScoping>
    NSArray *copid = [[NSArray alloc] initWithArray:stu copyItems:NO]; //NO表示是引用计数拷贝 //YES表示深拷贝
    

    NSMutableArray:

    可变数组,是NSArray的子类

    1. 创建:(堆上)
    NSMutableArray *array1 =[NSMutableArray array];
    NSMutableArray *array2 = [NSMutableArray arrayWithCapacity:100]; //预估值
    NSMutableArray *array3 = @[@"one", @"tow"]; //退化为NSArray
    NSMutableArray *array4 = [NSMutableArray arrayWithObjects: @"one", @"tow", @"three",nil]; //最常用,不可少nil
    
    2.添加(元素)方法 :
    [array4 addObject:@"six"]; //末尾添加
    [array4 insertObject:@"fine" atIndex:2]; //指定下标处添加
    
    3. 修改(元素)方法:
    [array4 replaceObjectAtIndex:0 withObject:@"NO"]; //指定下标修改
    批量修改:
     NSArray *replace = @[@"five", @"six", @"seven"];
     [array4 replaceObjectsInRange:NSMakeRange(1, 2) withObjectsFromArray:replace];
    
    
    4. 删除:
    [array4 removeLastObject]; //删除最后一个元素
    [array4 removeObjectAtIndex:0]; //删除下标元素
    [array4 removeObject:@"six"]; //删除元素
    [array4 removeObjectsInRange:NSMakeRange(0, 2)]; //指定范围删除
    NSArray *del = @[@"five", @"three"];
    [array4 removeObjectsInArray:del]; //删除不连续元素
    [array4 removeAllObjects]; //清空数组
    

    注意:

    //不能一次遍历
    for (NSArray *college in school) {
         for ( NSArray *class in college) {
             for (TRStudent *stu in class) {
                //if(stu.age >=20)
                NSLog(@"%@", stu);
              }
          }
    }
    
    //数组遍历过程中 删除元素 会有元素遍历不到(丢元素)
        NSMutableArray *mArray = [@[@1,@2,@3,@4,@5,@6,@7,@8,@9,@10] mutableCopy];
        for (NSInteger i = 0; i < mArray.count; i++) {
            static int index = 0;
            NSLog(@"------ %d",++index);
            [mArray removeObjectAtIndex:i];
        }
        NSLog(@"mArray = %@",mArray);
    
    
    成功的三大原则: 1、坚持 2、不要脸 3、坚持不要脸
  • 相关阅读:
    codevs 3641 上帝选人
    codevs 1966 乘法游戏
    codevs 1345 饥饿的奶牛
    codevs 1962 马棚问题--序列型DP
    codevs 1959 拔河比赛--判断背包内刚好装满n/2个物品
    codevs 1297 硬币
    [转载]矩阵取数游戏
    101.金明的预算方案(分组背包)
    105.(并查集结合绝对值最小的01背包)选学霸
    POJ 2528 Mayor's posters(线段树)
  • 原文地址:https://www.cnblogs.com/xulinmei/p/7420085.html
Copyright © 2011-2022 走看看