zoukankan      html  css  js  c++  java
  • ios ——OC——NSArray的用法

    NSArray
     
     
    从本质上讲,NSArray 就是一个存放对象的容器。
    NSArray只能存储Objective-C 对象,而不能存储C语言中的基本数据类型,比如:int,flot,指针等。 在使用NSArray时,需特别注意,必须以nil 结尾。以此来代表结束。
    NSArray 创建的是静态数组,一旦创建之后,就再也不能添加和删除数组中的对象了。
     
     
    1.NSArray的创建:
    类方法创建数组:
    1. NSArray *array1 = [NSArray arrayWithObject:@"obj"];  
    2. NSArray *array2 = [NSArray arrayWithObjects:@"obj1", @"obj2", @"obj3", nil];  
    3. NSArray *array3 = [NSArray arrayWithArray:array2];  
    实例方法创建数组:
    NSArray *array4 = [[NSArray alloc] initWithObjects:@"AAA", @"bbb", nil];  
    NSArray *arr = [NSArray array];//初始化一个空的数组(不常用);
            NSArray *arr1 = [NSArray arrayWithObject:@"123"];
            NSLog(@"%@",arr1);//初始化一个包含一个元素的数组;
            NSArray *arr2 = [NSArray arrayWithObjects:@"zhangyu",@"zhangdawei",@"liuhuan" ,nil];//初始化多个元素的数组,元素之间用逗号隔开,最后以nil结束;
            NSArray *arr3 = @[@"123",
                              @"456",
                             @"789"
                              ];//初始化多个元素时数组元素之间用逗号隔开,注意,最后一个元素后面不要加逗号(如果元素是一个类的对象则不用双引号)。
     
    2.NSArray的使用:
    (1)求数组的长度:
            NSUInteger count = arr3.count;//数组元素的个数(数组的长度);
            NSLog(@"数组元素的个数:%zi",count);
           NSLog(@"数组元素的个数:%zi",arr3.count);
     
    array == nil 和 [array count] == 0
    前者为true的时候表示这个对象是nil,是一个空的指针,它甚至没有被创建出来。
    后者为true表示这个对象为nil或者没有任何元素。
     
    (2)取数组中的元素
            [arr3 firstObject];//数组的第一个元素
            [arr3 lastObject];//数组的最后一个元素
            [arr3 objectAtIndex:2];//指定位置上的数组元素
            long int i = [arr3 indexOfObject:@"123"];//获取某个元素在数组中的位置(数据类型为long/long int/NSUInteger(Integer 整数 整体 完整的事物));
            NSLog(@"i=%ld",i);
    (3)判断数组中是否包含某个元素
            BOOL flag = [arr3 containsObject:@"123"];//判断数组中是否包含某个元素 (1包含, 0不包含)
            NSLog(@"flag=%d",flag);
     
    (4)数组的遍历  (很重要)
    <1>for循环遍历(最常用)
            for(int i = 0;i < arr3.count;i++)
            {
                NSString *str = arr3[i];
                NSLog(@"%@",str);
               //id obj = [arr3 objectAtIndex:i];
               //NSLog(@"%@",obj);
            }
    <2>使用枚举器进行遍历
            NSEnumerator *e = [arr3 objectEnumerator];//获取数组所有元素的枚举器
            //[e nextObject]第一次遍历,nextobject指向数组的首元素,当取值结束以后,再指向下一个元素,直到取完最后一个元素,此时nextObject指向nil,值为0,遍历结束
            id obj;
            while(obj=[e nextObject])
                NSLog(@"%@",obj);
    <3>快速枚举(最快速,但没办法使用下标)(不需要 NSEnumerator *e = [arr3 objectEnumerator];直接用for进行遍历)
            for(id obj1 in arr3)
                NSLog(@"%@",obj1);
    <4>数组存放自定义类的对象(定义一个student类和name,number属性 ,初始化5个对象)
            Student *stu1 = [[Student alloc]init];
            stu1.name = @"张一";
            stu1.number = 201501;
            Student *stu2 = [[Student alloc]init];
            stu2.name = @"张二";
            stu2.number = 201502;
            Student *stu3 = [[Student alloc]init];
            stu3.name = @"张三";
            stu3.number = 201503;
            Student *stu4 = [[Student alloc]init];
            stu4.name = @"张四";
            stu4.number = 201504;
            Student *stu5 = [[Student alloc]init];
            stu5.name = @"张五";
            stu5.number = 201505;
            NSArray *studentarr2 =@[stu1,
                                    stu2,
                                    stu3,
                                    stu4,
                                    stu5
                                    ];
            for (int i = 0; i < studentarr2.count; i++) {
                id stu = studentarr2[i];
                //判断某个对象是否是某个类,多用于处理类型不确定的情况
                if ([stu isKindOfClass:[Student class]]) {
                    NSLog(@"姓名:%@ 学号:%d",[stu name],[stu number]);
                              }
                     }
    运行的结果:
    姓名:张一 学号:201501
    姓名:张二 学号:201502
    姓名:张三 学号:201503
    姓名:张四 学号:201504
    姓名:张五 学号:201505
     
    (5)排序(从小到大)
           NSArray *arr4  = @[@"6",@"9",@"8",@"1"];
            NSArray *arr5 = [arr4 sortedArrayUsingSelector:@selector(compare:)];(用于数组中的元素不是对象(是字符串的情况!))
            NSLog(@"%@",arr5);
     
    加入先创建一个Student类,初始化四个对象stu1,stu2,stu3,stu4放入数组,按要求进行排序
    排序方法定义:
    -(NSComparisonResult)compareWithScore:(Student *)stu;
    排序方法实现:
    -(NSComparisonResult)compareWithScore:(Student *)stu
    {
        NSComparisonResult result;
        if(self.score < stu.score)
            result = 1;
        else result = -1;
        return result;
    }
    主程序:
     NSArray *studentarr = @[    stu1,
                                 stu2,
                                 stu3,
                                 stu4
            //数组元素是某个类的对象的排序 ];
            //第一种方法:
            NSArray *scorearr1 = [studentarr sortedArrayUsingSelector:@selector(compareWithScore:)];
            NSLog(@"scorearr1=%@",scorearr1);
            //第二种方法:
            NSArray *scorearr2 = [studentarr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
                NSComparisonResult result = -1;
               
                if ([obj1 score] < [obj2 score])
                    result = 1;
                    return result;
               
            }];
            NSLog(@"scorearr2=%@",scorearr2);
            //第三种方法(描述方法):
            NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"score" ascending:NO  ];
            NSArray *desarr = @[sort];
            NSArray *scorearr3 = [studentarr sortedArrayUsingDescriptors:desarr];
            NSLog(@"scorearr3=%@",scorearr3);
           // 根据学生的成绩由低到高排序,如果成绩一样,则按照年龄从小到大排序*(描述方法)
            NSSortDescriptor *sort1 = [NSSortDescriptor sortDescriptorWithKey:@"score" ascending:YES  ];
            NSSortDescriptor *sort2 = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES  ];

            NSArray *desarr1 = @[sort1,sort2];
            NSArray *scoreagearr = [studentarr sortedArrayUsingDescriptors:desarr1];
            NSLog(@"scoreagearr=%@",scoreagearr);
     
    感谢您的访问! 若对您有帮助或有兴趣请关注博客:http://www.cnblogs.com/Rong-Shengcom/
  • 相关阅读:
    201521123105 第8周Java学习总结
    201521123105 第七周Java学习总结
    201521123105 第六周Java学习总结
    201521123105 第四周Java学习总结
    201521123105 第三周Java学习总结
    201521123105《jave程序》第二周学习总结
    201521123105 《Java程序设计》第1周学习总结
    网络15软工个人作业5——软件工程总结
    个人作业4——alpha阶段个人总结
    软件工程网络15个人作业3——案例分析
  • 原文地址:https://www.cnblogs.com/Rong-Shengcom/p/4963824.html
Copyright © 2011-2022 走看看