您的位置:首页 > 移动开发 > Objective-C

Foundation 之 NSArray和NSMutableArray

2015-10-25 18:49 477 查看

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:@" "];  // 将逆序的数组拼接成字符串
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息