Foundation 之 NSArray和NSMutableArray

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:@" "];  // 將逆序的數組拼接成字符串

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章