Foundation 之 NSArray和NSMutableArray

10 篇文章 0 订阅
10 篇文章 0 订阅

NSArray数组


      OC允许使用C的数组。

      但使用OC数组NSArray可以用来存储一系列对象。

      数组是一列对象,数组有序地存储着一组对象,对象是OC中任意类型的对象。


数组初始化

      NSArray * array = [[NSArray alloc] initWithObjects:@"one", @"two", @"three", nil];
      或者NSArray * array = @[@"one", @"two", @"three"];
            // 数组的元素可以是任意的对象
            // 数组中装的是对象的地址

打印数组-就是打印数组的每个元素

      NSLog(@"%@", array);

            // "%@"打印出来的是array这个数组对象的description方法的返回值,

                                                                                     数组这个对象已经重写了description方法。

            // "%@"打印对象,打印出来的是这个对象的description方法的返回值。

            // NSArray的description方法就是把它所有元素对象的description的

                                                                                    返回值合在一起形成一个新的字符串,然后返回。

获取数组中某一元素对象

      NSString * str1 = array[1];
      或者
      NSString * str1 = [array objectAtIndex:1];

在数组中查找某一元素对象

      int index = [array indexOfObject:@"two"]; // 返回查找对象的下标

      if(index == NSNotFound) { 

            // 如果没找到会返回一个特殊值NSNotFound

            NSLog(@"not find the object");

      }

创建一个数组并包含另个数组中的元素

      NSArray * newArray = [array subArrayWithRange:NSMakeRange(1,2)];  // 新数组包括"two","three".

数组的遍历

      1.枚举器法

      NSEnumerator * enumerator = [array objectEnumerator];  // 使用数组对象的枚举方法创建枚举器
      id obj;  // 存储每一次获取的对象,因为对象可能不同,所以用id声明
      while(obj = [enumerator nextObject]) {
            NSLog(@"%@", obj);
      }

      2.快速枚举法

      备注:所有的容器类都支持快速枚举。
      for(id obj in array) {
            NSLog(@"%@", obj);
      }

      3.使用i值遍历

      说明:array objectAtIndex:index 可以获取数组array下标为index的元素
      NSUInteger length = [array count];  // 返回数组array的元素个数
      NSUInteger i;
      for(i = 0; i < length; i++){
            NSLog(@"%@", [array objectAtIndex:i]);
      }

NSMutableArray可变数组


NSMutableArray可变数组类是NSArray数组的子类,除了继承父类的成员函数外,特有一些改变元素个数和顺序的方法:


特有成员函数

数组初始化

      NSMutableArray * array = [[NSMutableArray alloc] initWithObject:@"one",@"two",nil]; 

            // 继承父类NSArray的初始化方法

      或
      NSMutableArray * array = [[NSMutableArray alloc] init]; // 创建一个空数组

删除所有元素

      [array removeAllObject]; 

往数组里增加元素

      [array addObject:@"one"]; 
      [array addObject:@"two"];
      [array addObject:@"three"];
      [array addObject:@"four"];
      [array addObject:@"five"];

将新对象插入到指定位置

      [array insertObject:@"zero" atIndex:0]; 

删除最后一个元素

      [array removeLastObject]; 

删除指定的元素

      [array removeObject:@"one"];

            // 如果在程序中以这种直接创建字符串的方式创建两个字符串,

                                       如果两个字符串的内容完全相同,那么这两个字符串是同一个对象。

删除指定下标的元素

      [array removeObjectAtIndex:1];

交换指定下标的元素

      [array exchangeObjectAtIndex:0 withObjectAtIndex:1];

替换数组中指定下标的元素

      [array replaceObjectAtIndex:0 withObject:@"zero_new"];


注意,只要数组的元素的个数或者顺序发生改变,使用枚举法正序遍历都会发生崩溃,所以如果有增删,只能用i值遍历法遍历数组。



数组和字符串的联合使用


字符串切割为数组

      NSString * str = @"I am a so bad man";

      NSArray * array = [str componentsSeparatedByString:@" "];  // 把字符串以“ ”(空格)分割成数组

数组拼接为字符串

      NSString * newStr = [array componentsJoinedByString:@" "];  // 把数组元素以“ ”(空格)连接成字符串

例子:将字符串"I am a so bad man"倒序输出"man bad so a am I"

      NSString * str = @"I am a so bad man";
      NSArray * array = [str componentsSeparatedByString:@" "];  // 切割成数组
      NSMutable * mutableArray = [[NSMutable alloc] init];  // 初始化一个可变数组
      NSEnumerator * enumerator = [array reverseObjectEnumerator];  // 获取数组的逆序枚举器
      NSString * obj;
      while(obj = [enumerator nextObject]){
            [mutableArray addObject:obj];  // 将逆序枚举器中的数组存入到可变数组中
      }
      NSString * newStr = [mutableArray componentsJoinedByString:@" "];  // 将逆序的数组拼接成字符串

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值