OC语言 集合>>不可变数组(NSArray) 与 可变数组(NSMutableArray)

来源:互联网 发布:陌生人群发软件 编辑:程序博客网 时间:2024/06/02 13:40

不可变数组(NSArray) 与 可变数组(NSMutableArray)



//

//  main.m

//  Tank-OC05-01

//

//  Created by ibokan on 15/12/14.

//  Copyright © 2015谭其伟. All rights reserved.

//


#import <Foundation/Foundation.h>


int main(int argc,const char * argv[]) {

    @autoreleasepool {

        

        //不可变数组 NSArray

        //初始化

        //创建一个空数组

        

        NSArray *array1 = [[NSArrayalloc]init];

        NSArray *array2 = [NSArrayalloc];

        

        //创建一个里面只有一个元素的不可变数组

        NSArray *array3 = [NSArrayarrayWithObject:@"Tank"];

        

        //创建一个里面有多个元素的不可变数组

        NSArray *array4 = [NSArrayarrayWithObjects:@"Tank",@"Kiwir",

                           @"Quik",nil];

        //niL只能出现在数组的最后,不能在数组中间存放nil,因为nil是一个NSArray的结束标志。如果在中间出现,那么就在中间结束运行。在这里nil并不算一个字符,与C不一样

        

        

        //新语法(第二种语法)

        NSArray *array5 = @[@"Rick"];

        

        NSArray *array6 =@[@"Tank",@"Kiwir",@"Quik"];

        

        

        

        //根据另一个数组产生新的数组

        NSArray *array7 = [NSArrayarrayWithArray:array6];

        

        //少用下面的方法

//        NSArray *array8 = [[NSArray alloc]initWithObjects:@"Tank",@"Kiwir",@"Quik", nil];

        

        

        //从本地文件读取数组

        NSArray *array8 = [NSArrayarrayWithContentsOfFile:@""];

        

        //从网络文件读取数组

        NSURL *url = [NSURLURLWithString:@"http://www.baidu.com"];//网址是个字符串

        NSArray *array9 = [NSArrayarrayWithContentsOfURL:url];

        //合起来为

        NSArray *array90 =[NSArrayarrayWithContentsOfURL:[NSURLURLWithString:@""]];

        

        

        //求数组中元素的个数

        NSUInteger count = array6.count;

        NSLog(@"%lu",count);  //lu无符号整形

        

        

        //数组的操作

        //访问数组中的元素

        

        

        //访问array6中的第一个元素

        NSString *str = [array6 objectAtIndex:0];   //里面是一个字符串,所以用一个字符串来接收

        NSLog(@"str = %@",str);

        

        //遍历数组元素

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

            NSString *str1 =[array6 objectAtIndex:i];

            NSLog(@"%@",str1);

        }

        

        

        //新语法访问数组中的元素

        NSString *str2 = array6[0];

        NSLog(@"str2 = %@",str2);

        

        

        //NSNumber

        char c;

        NSNumber *number = [NSNumbernumberWithChar:c];

        //等价于

        //新语法

        NSNumber *number2 = @5;

        

        NSNumber *number3 = [NSNumbernumberWithBool:YES];

        //等价于新语法

        NSNumber *number4 = @YES;

        

        //通过数组中的元素找下标

        NSUInteger index = [array6 indexOfObject:@"Tank"];

        NSLog(@"index = %lu",index);

        

        

        //判断数组中是否存在某个元素

        BOOL flag = [array6 containsObject:@"Tank"];

        NSLog(@"flag = %d",flag);

        //BOOL 本身 是个整形,返回 10 yes or no

        

        

        

        //向不可变数组中增加一个元素,产生新的不可变数组

        NSArray *newArray1 = [array6 arrayByAddingObject:@"KK"];

        NSLog(@"%@",newArray1);     //直接当对象输出了

        

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

            NSArray *newArray2 = newArray1[i];

            NSLog(@"newArray1[%d] = %@",i,newArray2);

        }

        

        //通过某个字符“-”来将已有字符串分开成数组

        NSString *string = @"123-456-789";

        NSArray *array11 = [string componentsSeparatedByString:@"-"];

        NSLog(@"array11 = %@",array11);

        

        

        //通过某个字符来将已有数组连在一起成字符串

        NSString *string12 = [newArray1 componentsJoinedByString:@"~"];

        NSLog(@"string12 = %@",string12);

        

        

        NSArray *array13 = @[@"123",@"456",@"789",@"000"];

        NSString *str3 = [array13 componentsJoinedByString:@"-"];  //连接

        NSLog(@"str3 = %@",str3);

        NSArray *str4 = [str3 componentsSeparatedByString:@"-"];   //分开

        NSLog(@"str4 = %@",str4);

        NSString *str5 = [str4 componentsJoinedByString:@""];     //中间不加就直接连起来

        NSLog(@"str5 = %@",str5);

        

        

        /*

         使用NSArray类注意事项

         1.数组越界:当访问NSArray时,索引超出元素个数之后会报出一个异常结果,所以最好检查一下索引结果是否越界,然后再进行调用。

         2.数组会对加入其中的对象自动把引用计数加一,

         3.不能在数组中间存放nilnil只能出现在数组的最后,因为nil是一个NSArray(不可变数组)线束标志。

         

         */

        



 //        可变数组

        

        

        //可变数组NSMutableArray,它是NSArray的子类

        //初始化方法

        //初始化一个空的可变数组

        NSMutableArray *mArray1 = [NSMutableArrayarray];

        

        //创建一个里面只有一个元素的可变数组

        NSMutableArray *mArray2 = [NSMutableArrayarrayWithObject:@"1"];

        

        //创建一个里面有多个元素的可变数组

        NSMutableArray *mArray3 = [NSMutableArrayarrayWithObjects:@"1",@"2",@"3",@"4",nil];

        //好像不能像不可变数组那样新命名

        

        //根据另一个数组产生新的数组

        NSMutableArray *mArray4 = [NSMutableArrayarrayWithArray:mArray3];

        

        //可变数组独有的初始化方法,只是初始化,但是这里是可变的,所以最终不一定是10

        NSMutableArray *mArray5 = [NSMutableArrayarrayWithCapacity:10];

        //数组的容量也只是数组最终大小的一个参考,容量数值之所以存在,是为了cocoa能够对代码进行一些优化,cocoa即不会将对象预写入数组,也不会用该容量来限制数组的大小。

        

        

        //从本地读取数组

        NSMutableArray *mArray6 = [NSMutableArrayarrayWithContentsOfFile:@""];

        

        //从网络读取数组

        NSMutableArray *mArray7 = [NSMutableArrayarrayWithContentsOfURL:[NSURLURLWithString:@""]];

        

        //增加

        //在数组的末尾加一个元素

        [mArray3 addObject:@"5"];      //没有返回值

        

        //在数组指定位置插入一个元素

        [mArray3 insertObject:@"Tank"atIndex:2];

        

        //替换,将数组指定位置上的元素替换成新的元素

        [mArray3 replaceObjectAtIndex:2withObject:@"Kiwir"];

        

        //交换,将数组指定位置上的两个元素交换位置     //如下将第1位和第2位交换

        [mArray3 exchangeObjectAtIndex:0withObjectAtIndex:1];

        

        //删除

        //删除指定元素

        [mArray3 removeObject:@"1"];

        

        //删除指定位置上的元素

        [mArray3 removeObjectAtIndex:0];   //删除第一个

        

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

        [mArray3 removeLastObject];

        

        //删除数组所有元素

//        [mArray3 removeAllObjects];

        

        

        //遍历

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

            NSLog(@"111 = %@",mArray3[i]);

        }

        

        

        

        

        

        //数组的遍历

        NSMutableArray *marray = [NSMutableArrayarrayWithObjects:@"1",@"2",@"3",@"4",@"5",nil];

        

        //1for循环

        //2法,数组的遍历 快速枚举 "forin"

        for (NSString *elementin marray) {

            NSLog(@"222 = %@",element);

        }

        

        

        //使用系统提供的枚举类型

        NSEnumerator *enumerator = [marray objectEnumerator];

        

        //得到一个枚举器以后我们就可以通过while循环来遍历数组元素,而不用管索引问题,每次循环可以通过枚举器的nextObject方法得到下一个数组里的对象,直到到nextObjectnil时,循环结束,这也是为什么数组元素中不要出现nil的原因

        

        id ele;

        while (ele = [enumerator nextObject]) {         //使用枚举器遍历集合

            NSLog(@"%@",ele);

        }

      /*

       注意:

       我们使用枚举器遍历数组元素期间,不要添加或者删除数组元素,否则运行的时候程序会崩溃

       因为通过objectEnumerator的枚举器的时候数组元素的个数已经记录在枚举器里了,在遍历的时候,如果添加或删除数组元素的话,数组元素的个数就前后不一致而出现异常。

       

       

       */

        

     

        

        

    }

    return 0;

}





输出:

2015-12-15 19:26:41.354 Tank-OC05-01[34545:277399] 32015-12-15 19:26:41.355 Tank-OC05-01[34545:277399] str = Tank2015-12-15 19:26:41.355 Tank-OC05-01[34545:277399] Tank2015-12-15 19:26:41.355 Tank-OC05-01[34545:277399] Kiwir2015-12-15 19:26:41.355 Tank-OC05-01[34545:277399] Quik2015-12-15 19:26:41.355 Tank-OC05-01[34545:277399] str2 = Tank2015-12-15 19:26:41.356 Tank-OC05-01[34545:277399] index = 02015-12-15 19:26:41.356 Tank-OC05-01[34545:277399] flag = 12015-12-15 19:26:41.356 Tank-OC05-01[34545:277399] (    Tank,    Kiwir,    Quik,    KK)2015-12-15 19:26:41.356 Tank-OC05-01[34545:277399] newArray1[0] = Tank2015-12-15 19:26:41.356 Tank-OC05-01[34545:277399] newArray1[1] = Kiwir2015-12-15 19:26:41.356 Tank-OC05-01[34545:277399] newArray1[2] = Quik2015-12-15 19:26:41.357 Tank-OC05-01[34545:277399] newArray1[3] = KK2015-12-15 19:26:41.357 Tank-OC05-01[34545:277399] array11 = (    123,    456,    789)2015-12-15 19:26:41.357 Tank-OC05-01[34545:277399] string12 = Tank~Kiwir~Quik~KK2015-12-15 19:26:41.357 Tank-OC05-01[34545:277399] str3 = 123-456-789-0002015-12-15 19:26:41.358 Tank-OC05-01[34545:277399] str4 = (    123,    456,    789,    000)2015-12-15 19:26:41.358 Tank-OC05-01[34545:277399] str5 = 1234567890002015-12-15 19:26:41.359 Tank-OC05-01[34545:277399] 111 = Kiwir2015-12-15 19:26:41.359 Tank-OC05-01[34545:277399] 111 = 32015-12-15 19:26:41.359 Tank-OC05-01[34545:277399] 111 = 42015-12-15 19:26:41.359 Tank-OC05-01[34545:277399] 222 = 12015-12-15 19:26:41.359 Tank-OC05-01[34545:277399] 222 = 22015-12-15 19:26:41.359 Tank-OC05-01[34545:277399] 222 = 32015-12-15 19:26:41.360 Tank-OC05-01[34545:277399] 222 = 42015-12-15 19:26:41.360 Tank-OC05-01[34545:277399] 222 = 52015-12-15 19:26:41.360 Tank-OC05-01[34545:277399] 12015-12-15 19:26:41.360 Tank-OC05-01[34545:277399] 22015-12-15 19:26:41.360 Tank-OC05-01[34545:277399] 32015-12-15 19:26:41.360 Tank-OC05-01[34545:277399] 42015-12-15 19:26:41.361 Tank-OC05-01[34545:277399] 5Program ended with exit code: 0






0 0
原创粉丝点击