你的位置:首页 > 操作系统

[操作系统]Oc中的数组


==========================

数组

==========================

一.认识数组

oc中可以把NSObject对象的子类放到数组这个集合中,但是int、float、double等基础数据类型需要先进行转换才可以存入数组。

oc中数组以NS开头,其中分为可变数组和不可变数组;

1.不可变数组(NSArray)

数组在创建的时候被初始化之后,不可以再次进行增、删、改;

        //NSArray 是一个类,苹果公司封装好的数组类。

        //数组需要先分配内存再使用,

        //initWithObjects 逐个单词翻译:init -- 初始化 with ---对... objects --- 多个对象

        //initWithObjects 用多个对象对 [NSArray alloc] 分配的内存空间进行初始化

        NSString* str = [NSString stringWithFormat:@"%d",123];

        NSArray* arr = [[NSArray alloc]initWithObjects:@"one",@"two",@"three", nil];

        //【注】以小括号包围,每个数据都是以逗号隔开的数据格式是数组数据

        dog* mydog = [[dog alloc]init];

        mydog.value = 100;

        cat* mycat = [[cat alloc]init];

         //oc中的数组可以存储不一样类型的数据

        //定义objectArr这个对象并给它分配内存并初始化值,最后一个nil结尾一定不要省略

        //数组初始化之后,不能对其进行增删改的数组,是不可变数组,不可变数组的数据只有第一次初始化的时候给赋值,之后不允许进行增删改;可以理解为是一种只读做用;

        NSArray* objectArr = [[NSArray alloc]initWithObjects:mydog,mycat,@"yudejun", nil];

        NSLog(@"%@\n%@",arr,objectArr);

         //取元素

        //【注】严禁数组越界

        //隐式转换

        //

        dog* tmp = [objectArr objectAtIndex:0];

        NSLog(@"%d",tmp.value);

        

        //取数组元素个数

        NSLog(@"%ld",[objectArr count]);

        

        //遍历数组

        for (int i=0; i<[arr count]; i++) {

            

            NSLog(@"%@",[arr objectAtIndex:i]);

        }

        //oc中遍历数组有一个更简单的方法

        //这个语法就是for(in)语法,for循环先去判断NSString* str 是否在arr中,如果在,则继续循环

        //数组会遍历arr的元素个数次

        for (NSString* str in arr) {

            NSLog(@"%@",str);

        }

        

        //优缺点比对

        //第一种写法方便遍历指定元素,但写起来繁琐。

        //第二种写法简洁,并且不会出现数组越界导致程序崩溃的问题

        //这2种方式互补,某一些情况下必须用第一种方式才能解决。

        

        

        //从Xcode4.6开始,苹果提供如下写法

        //创建了一个不可变数组并初始化了值。

        

        NSArray* TempArr = @[@"yu",@"de",@"jun"];

       //如上方法等价: NSArray* TempArr = [[NSArray alloc]initWithObjects:@"yu",@"de",@"jun", nil];

        NSLog(@"%@",TempArr);

        

        //[arr objectAtIndex:0]

        NSLog(@"%@",arr[1]);

 

        //NSMutableArray 为可变数组,可以进行增删改

        NSMutableArray* m_arr = [[NSMutableArray alloc]init];

        

        //添加元素

        [m_arr addObject:@"1"];

        [m_arr addObject:mydog];

        [m_arr addObject:@"3"];

        

        //删除下标索引值是0的元素

        [m_arr removeObjectAtIndex:0];

        

        //交换数组元素

        [m_arr exchangeObjectAtIndex:0 withObjectAtIndex:1];

        

        //清空数组  删除数组中所有元素

        [m_arr removeAllObjects];

        

        //删除数组元素中最后一个元素

        [m_arr removeLastObject];

        

        //插入一个元素,在索引值是0的位置,原来元素位置后移

        [m_arr insertObject:@"haha" atIndex:0];

        

        //替换元素 用999这个对象值来替换掉第0个元素的值

        [m_arr replaceObjectAtIndex:0 withObject:@"999"];

        

        //判断是否包含某一个对象

        BOOL isContain = [m_arr containsObject:@"999"];

        if (isContain) {

            NSLog(@"包含");

        }

        else

        {

            NSLog(@"不包含");

        }