標籤:
在學習 Objective-C的過程中,感覺數組在這一個學習方面是一個比較大的應用域,所以寫這篇隨筆來總結一下。
首先聲明的是,與C語言的數組不同,Objective-C的是數組只能用來儲存物件,而不是儲存int 、double、char等基礎資料類型,一般要存這些基礎資料類型,對於我這個剛學 Objective-C的新手來說,我的做法是將有關數位基礎類型 如 int 、double、char首先轉換成一個叫做 NSNumber的類 char*類型的轉換成 Objective-C的字串 NSString 類來進行儲存,相關 NSNumber 和 NSString 在以後我學習到的時候會來總結一下我的學習成果。
Objective-C的數組分為兩種,一種叫做不可變數組(NSArray),一種叫做可變數組(NSMutableArray),NSMutableArray類是NSArray類的一個子類。
(1)不可變數組(NSArray) ---------該類型在確定之後,不能進行數組元素的更改以及交換
//初始化------(兩種方式)
NSArray * array =[ [NSArray alloc] initWithObjects:@"abc",@"123",@"ABC", nil];
NSArray * array = @[@"abc",@"123",@"ABC"]; //後來看到老師定義數組的時候用這種方式進行的初始化,所以也記錄了下來
(2)可變數組(NSMutableArray)-------該類型在確定之後,可以進行元素的增、刪、改(包括元素的位置 以及 數組的元素個數)
//初始化------(兩種方式)
NSMutableArray * mutableArray = [[NSMutableArray alloc] init];
NSMutableArray * mutableArray = [NSMutableArray array]; //教我的老師示範時的初始化,兩種初始化有沒有區別,或者不同,現在先不討論
//增加元素
對於可變數組,蘋果給我們提供了很多方法,因為新手的原因,我基本也使用了其中的一種
[mutableArray addObject:(id)]; //這是mutableArray 對象調用增加元素的一個方法
例如:[mutableArray addObject:@"EFG"]; //這是在mutableArray 對象中添加了一個NSString 類型的元素,值為@"EFG"
// 刪除元素
[mutableArray removeAllObjects]; //這個方法是移除 mutableArray 中的所有元素
[mutableArray removeLastObject]; //這個方法是移除 mutableArray 的最後一個元素
[mutableArray removeObject:(id)]; //這個方法是移除值為id的元素(這樣描述其實是不正確的),id實際存放的應該是地址,但字串除外
例如:[mutableArray removeObject:@"abc"]; //這是在mutableArray 對象中刪除了一個值為"abc"的元素
[mutableArray removeObjectAtIndex:(NSUInteger)]; //這個方法是移除位置為 NSUInteger 的元素,這個數字實際是刪除類似下標為 NSUInteger的元素
例如:[mutableArray removeObjectAtIndex:3]; //這是刪除了第4個元素
//修改元素位置
[mutableArray exchangeObjectAtIndex:(NSUInteger1) withObjectAtIndex:(NSUInteger2)] //這個方法是將位置 NSUInteger1 的元素和 NSUInteger2 的元素進行交換位置
例如:[mutableArray exchangeObjectAtIndex:1 withObjectAtIndex:2];//意思是將第2個元素和第3個元素交換(因為NSUInteger是下標)
/*****
***數組的遍曆 (我所瞭解的目前有三種方式)
****/
1、列舉程式法 (這種方法在遍曆過程中不能改變數組的個數以及元素的位置,不然會出錯)
NSEnumerator * enumerator = [mutableArray objectEnumerator];//構造列舉程式
id obj;
while (obj = [enumerator nextObject]) {
//obj既為元素
}
2、快速枚舉法 (有的叫做 快速for迴圈) (這種方法依舊在遍曆過程中不能改變數組的個數以及元素的位置,不然會出錯)
for(id obj in mutableArray){
//obj既為元素
} //這種方法他們都說是最快的,我也就當作最快的來用
對於列舉程式,還有一種叫做逆序列舉程式,方法如下
NSEnumerator *enumrator = [mutableArray reverseObjectEnumerator];//構造逆序列舉程式,用法同列舉程式一樣,但不一樣的是,用逆序列舉程式遍曆的時 候,以上兩種方法可以改變數組的個數以及元素的位置。
3、使用for迴圈進行遍曆 (這種遍曆方法可以在迴圈中改變數組的個數以及元素的位置)
for (int i = 0; i < [mutableArray count]; i++) {
id obj = [mutableArray objectAtIndex:i];// obj既為元素
}
Objective-C學習-數組 NSArray 和 NSMutableArray(歡迎提意見)