【学习ios之路:Objective-C】NSArray和NSMutableArray

来源:互联网 发布:淘宝免费货源怎么找 编辑:程序博客网 时间:2024/06/07 15:44
1.不可变数组(NSArray)

1).不可变数组(NSArray)

*数组中只能存放对象.但是对于对象的类型没有限制.

* 实例化的时候以nil表示结束
* 通过下标索引对象

* NSArray无法添加.删除.修改元素.

2).创建对象,数组初始化赋值方法.

    //通过初始化添加数组元素   NSArray *array = [[NSArray alloc] initWithObjects:                           @"dd",@"asdf",@"duc" ,@"xiaozhang",nil];  NSLog(@"%@",array);    //通过便利构造器方法添加数组元素             NSArray *array1 = [NSArray arrayWithObjects:@"asd",@"asdf",nil];  NSLog(@"%@",array1);    //笑笑语法,语法糖  ---- 字面量  NSArray  *array = @[@"aa",@"asd",@"ddd",@"dd"];  NSLog(@"%@",array);       
3).%p与%@的区别

   Person *per = [[Person alloc] init];   NSString *str = [NSString stringWithFormat:@"frank"];   NSLog(@"%@",per);//decription   NSLog(@"%@",str);//frank   NSLog(@"%p",per);//0x100108120 指针变量存储的地址   NSLog(@"%p",&per);//0x100108120 指针per的地址
4).数组常见操作
①通过下标获取元素

   //数组的下标   NSArray *array  = [NSArray arrayWithObjects:@"sda",@"das",@"saad",nil];   NSUInteger count = [array count];//数组元素个数   NSLog(@"%ld",count);     //根据下标取出元素.   //NSString *str = [array objectAtIndex:6];//角标越界   NSString *str = [array objectAtIndex:2];//角标越界   NSLog(@"%@",str);//saad                NSString *str1 = [array objectAtIndex:0];//第一个元素   NSString *str2 = [array firstObject];//第一个元素   NSLog(@"%@",str1);   NSLog(@"%@",str2);   NSString *str3 = [array objectAtIndex:count - 1];//最后一个人   NSString *str4 = [array lastObject];//最后一个   NSLog(@"%@",str3);   NSLog(@"%@",str4);
注:   objectAtIndex:count - 1 与 lastObject 方法的区别
         相同点:都是获取数组中的第一个元素.
         不同点:当数组中的元素个数为零时,使用第一个方法程序会报错.使用第二个方法程序会 返回nil.程序可以继续执行,

②.判断元素是否存在

   NSArray *arr = [[NSArray alloc] initWithObjects:@"asdf",@"ddd",@"ccc" ,nil];   BOOL  isContain = [arr containsObject:@"ddd"];
③.根据对象获取下标

   //根据对象获取下标   NSUInteger index = [arr indexOfObject:@"ddd"];   NSLog(@"%ld",index);   //NSRange range = NSMakeRange(1,1);   //NSUInteger index1 = [arr indexOfObject:@"ccc" inRange:range];   //NSLog(@"%ld",index1);
④.不可变数组遍历

   NSArray *arr = [[NSArray alloc] initWithObjects:@"asdf",@"ddd",@"ccc" ,nil];   for (NSInteger i = 0;i < [arr count]; i++) {         NSLog(@"%@",[arr objectAtIndex:i]);       }                 //for in     for (NSString *temp in arr) {        NSLog(@"%@",temp);        }     //NSNumber 类 有接口,有实现     //NSInteger 基本数据类型        //20 是整型数据 @20 整形对象 NSNumber    NSArray *str1 = [NSArray arrayWithObjects:@34,@254,@20,@42,nil];      for (NSNumber *num in str1) {                NSLog(@"%@",num);         }         
5).可变数组(NSArray)

可变数组与不可变数组的区别:

    增加了增删除功能,即在原有的对象基础上做修改.

①创建对象


   //快速创建NSMutableArray对象,笑笑语法        NSMutableArray  *array1 = [@[@"aa",@"dd",@"asd"] mutableCopy]; //NSMutableArray *mutableArray = [[NSMutableArray alloc] initWithCapacity:1];  NSMutableArray *mutableArray = [[NSMutableArray alloc] init]; //NSMutableArray *mutableArray1 = [NSMutableArray arrayWithObjects:                                   @"asd",@"afg",@"dggd",@"fgads",nil];
②往数组中添加元素

   //(1).添加一个元素   [mutableArray addObject:@"asd"];    NSLog(@"%@",mutableArray);   //(2).插入一个元素.    [mutableArray insertObject:@"cdd" atIndex:0];     NSLog(@"%@",mutableArray);
③替换元素

    [mutableArray replaceObjectAtIndex:0 withObject:@"hhe"];    NSLog(@"%@",mutableArray);
④交换下标对应元素
    [mutableArray exchangeObjectAtIndex:0 withObjectAtIndex:1];    NSLog(@"%@",mutableArray);
⑤移除元素

    [mutableArray removeAllObjects];    NSLog(@"%@",mutableArray);    (1)移除指定元素    [mutableArray removeObject:@"asd"];    NSLog(@"%@",mutableArray);    (2)移除指定下标对应的元素    [mutableArray removeObjectAtIndex:0];    NSLog(@"%@",mutableArray);                (3)移除所有元素    [mutableArray removeAllObjects];    NSLog(@"%@",mutableArray);
⑥ 快速遍历
     for (NSString *str in mutableArray) {          NSLog(@"%@",str);       }
注:

      数组中可以存放相同的元素.
      数组的使用场景:当需要一个有序的集合来管理对象时,就使用数组.



0 0
原创粉丝点击