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