OC:OC中的集合类-NSArray(1)

OC:OC中的集合类-NSArray(一)

/*OC中的集合类-

         NSArray 用于对象有序集合

         NSSet  用于对象无序集合

         NSDictionary  用于键值映射

        

        这三种集合类是不可变的(一旦初始化后,就不能改变)

         

         (可变集合类,这三种可变集合类是对应上面三种集合类的子类)

        NSMutableArray  NSMutableSet  NSMutableDictionary

         

         这些集合类只能手机Cocoa对象(NSObject对象),如果想保存一些原始的C数据(如:intfloatdoubleBOOL等),则需要将这些原始的C数据封装成NSNumber类型的,NSNumber对象是Cocoa对象,可以被保存在集合类中。

         */

        

        /*

         NSArray  OC数组

        */

        

        

//==============================================================

        //C数组:所有元素必须是相同的数据类型

        

        int age[] = {1,2,3};

        age[1]; //取数组中的元素

        

        //carC数组

        Car *car1 = [[Car allocinit];

        Car *cAry[3] = {car1,[Car new],[Car new]};

        

//==============================================================

        //创建OC数组,ary1是空数组(这种方法不用)

        NSArray *ary1 =  [NSArray array];

        

        //ary2初始化时有一个元素

        NSArray *ary2 = [NSArray arrayWithObject:@"jereh"];

        

        //创建有多个元素的数组

        //nil不能缺省,是数组结束标志,不能作为元素存到数组里

        NSArray *ary3 = [NSArray arrayWithObjects:@"h",@"e",@"kong"nil];

        

        //快速创建数组  @[] 不能存nil

        NSArray *ary4 = @[@"c",@"s",@"d",@"n"];

        

//==============================================================

        

        //OC数组元素个数   -(unsigned) Count;

        NSArray *ary5 = @[@"c",@"s",@"d",@"n"];

        [ary5 count];

//        ary5.count;

        NSLog(@"数组元素个数:%ld",ary5.count);

        

//==============================================================

        //访问数组元素  -(id) objectAtIndex:(unsigned int)index;//获取指定索引处的对象

        NSArray *ary6 = @[@"c",@"s",@"d",@"n"];

//        [ary6 objectAtIndex:0];//获得数组中某个位置的元素

        NSLog(@"访问数组:%@",[ary6 objectAtIndex:0]);

        NSLog(@"访问数组:%@",ary6[0]); //C数组的简便方法

        

//==============================================================

        //1.遍历OC数组(按照顺序输出)

        Car *car = [[Car allocinit];

        NSArray *ary7 = @[@"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",car];

        for (int i=0; i<ary7.count; i++) {

            NSLog(@"遍历数组ary7%@",ary7[i]);

        }

        

        /*2.快速遍历OC数组(快速枚举):里面的元素都是OC对象,所以都是id类型;

        表示把ary7中的每个元素都赋值给obj,然后循环

         缺点:不知道取出的对象在数组中的位置。

         限制:不应在枚举过程中增加会删除数组中的指针

        */

        int i = 1;

        for (id obj in ary7) {

            NSLog(@"快速遍历第%i个:%@",i,obj);

            i++;

        }

        

        /*3.利用block遍历数组

           block没有返回值,有三个参数,obj当前对象,idx位置,*stop是停止遍历

         每遍历一个对象,block都会被调用一次

         (方法参数block部分,按回车会自动生成,不用手动写)

         

         */

        [ary7 enumerateObjectsUsingBlock:

         ^(id obj, NSUInteger idx, BOOL *stop) {

             //BOOL *stop

             if (idx>0) {

                 *stop = YES;

             }

             NSLog(@"block快速遍历 %ld个元素:%@",idx,obj);

             

             

        }

         ];

        

//==================================================================

        /*其他用法

         -(BOOL)containsObject:obj  确定数组中是否包含对象obj

         -(id)objectAtIndex:i  存储在位置i的对象

         -NSUIntegerindexOfObject:obj  第一个包含obj元素对的索引号

         

 

/*

         NSMutableArray  OC可变数组

         NSArray的子类,类似NSArray,但是可以增加或删除指针。

         */

        

//=========================================================

        

        //创建空数组

        NSMutableArray *ary1 = [NSMutableArray array];

        

        //添加元素

        [ary1 addObject:@"a"];

        [ary1 addObject:@"d"];

        NSLog(@"ary1 %@",ary1);

        

        //添加多个元素

        NSMutableArray *ary2 = [NSMutableArray array];

        

        [ary2 addObjectsFromArray:ary1];

        NSLog(@"ary2 %@",ary2);

        

//=========================================================

        //删除元素

        NSMutableArray *ary3 = [NSMutableArray arrayWithObjects:@"a",@"b",@"c",@"d"nil];

        

        //按照索引位置删除元素

        [ary3 removeObjectAtIndex:0];

        NSLog(@"ary3 %@",ary3);

        

        //删除指定元素

        [ary3 removeObject:@"b"];

        NSLog(@"ary3 %@",ary3);

        //删除全部元素

        [ary3 removeAllObjects];

        //删除最后一个元素

        [ary3 removeLastObject];

        

        NSMutableArray *ary4 = [NSMutableArray arrayWithObjects:@"a",@"b",@"c",@"d"nil];

        //在指定的范围内找到特定的元素进行删除

        [ary4 removeObject:@"b" inRange:NSMakeRange(02)];

        NSLog(@"ary4 %@",ary4);

        

        //删除某个范围内的元素

        NSMutableArray *ary5 = [NSMutableArray arrayWithObjects:@"a",@"b",@"c",@"d"nil];

        [ary5 removeObjectsInRange:NSMakeRange(03)];

        NSLog(@"ary5 %@",ary5);

        

        

        //删除了同时存在后面数组中的元素

        NSMutableArray *ary6 = [NSMutableArray arrayWithObjects:@"a",@"b",@"c",@"d"nil];

        NSArray *dAry = @[@"d"];

        [ary6 removeObjectsInArray:dAry];

        NSLog(@"ary6 %@",ary6);

        

//=========================================================

//        NSArray

        NSArray *ary7 = @[@"aa",@"bb"];

        

        //添加另一个数组中的全部元素到当前数组(重新设置数组元素,原来的元素被删掉了)

        NSMutableArray *ary8 = [NSMutableArray arrayWithObjects:@"a",@"b",@"c",@"d",@"e",@"f"nil];

        [ary8 setArray:ary7];

        NSLog(@"ary8 %@",ary8);

        

        //添加多个元素(在原数组的末尾添加新数组元素)

        NSMutableArray *ary9 = [NSMutableArray arrayWithObjects:@"a",@"b",@"c",@"d",@"e",@"f"nil];

        [ary9 addObjectsFromArray:ary7];

        NSLog(@"ary9 %@",ary9);

        

        //在索引位置添加一个元素

        [ary9 insertObject:@"jereh" atIndex:1];

        NSLog(@"ary9 %@",ary9);

        

//=========================================================

        //替换

        NSMutableArray *ary10 = [NSMutableArray arrayWithObjects:@"a",@"b",@"c",@"d",@"e",@"f"nil];

        

        [ary10 replaceObjectAtIndex:2 withObject:@"apple"];

        NSLog(@"ary10 %@",ary10);

        

        //用新的数组替换当前数组中某个范围的元素

        [ary10 replaceObjectsInRange:NSMakeRange(03withObjectsFromArray:@[@"Hello"]];

        NSLog(@"ary10 %@",ary10);

        

        

        //交换当前数组中某两个索引位置的元素

        [ary10 exchangeObjectAtIndex:0 withObjectAtIndex:2];

        NSLog(@"ary10 %@",ary10);

        

//=========================================================

        //网址解析

        NSString *str = @"http://www.baidu.com:/agsdha";

        NSArray *ary11 = [str componentsSeparatedByString:@"//"];

//        NSString *str1 = ary11[1];

        NSArray *ary12 = [ary11[1componentsSeparatedByString:@":"];

        NSArray *ary13 = [[ary11 lastObject]  componentsSeparatedByString:@":"];//lastObject取最后一个元素

        NSLog(@"ary11 %@",ary11);

        NSLog(@"ary12 %@",ary12);

        NSLog(@"ary13 %@",ary13);

       

        NSLog(@" %@",ary12[0]);

        

        

        

        

        

        //给数组分配容量

        NSMutableArray *array = [NSMutableArray arrayWithCapacity:20];