【轉】不可變數組NSArray與可變數組NSMutableArray


原文網址:http://www.jianshu.com/p/1ad327f56d1d

不可變數組NSArray

    //創建一個空數組 NSArray *array = [NSArray array]; //這樣創建是沒有意義的. //創建只有一個元素的數組 NSArray *array1 = [NSArray arrayWithArray:@"a"]; NSArray *array2 = [NSArray arrayWithObject:@"b"]; //使用便利構造器創建有多個元素數組 NSArray *array3 = [NSArray arrayWithObjects:@"Hola",@"Bonjour",@"Guten",@"Tag", nil]; //注意最后有nil //創建數組,有多個元素 使用對象方法 NSArray *array4 = [[NSArray alloc] initWithObjects:@"1",@"2",@"3", @"4",nil]; //用一個數組創建另一個數組 NSArray *array5 = [NSArray arrayWithArray:array3]; //在控制台打印數組中的所有對象 使用數組名 NSLog(@"%@",array5); //在控制台打印數組中的某個對象 使用數組名 + 下標法 NSLog(@"%@",array5[0]);

一些常用用法:

    NSArray *array = [NSArray arrayWithObjects:@"Hola",@"Guten",@"Tag",@"Bonjour", nil]; //1.獲取數組的元素個數 使用count NSLog(@"%ld",[array count]); //2.根據下標獲取下標對應的對象 NSLog(@"%@",[array objectAtIndex:2]); // 此處[]不能用.代替 //3.通過元素找下標 NSUInteger r = [array indexOfObject:@"three"]; NSLog(@"%ld",r); //4.判斷數組中是否包含了某個元素 BOOL r1 = [array containsObject:@"one"]; if (r1) { NSLog(@"包含這個元素!"); }else{ NSLog(@"沒找着!"); }

簡化的創建方式 (語法糖):

    NSArray *array = @[@"one",@"two",@"three",@"four"];

簡化的訪問方式(通過元素下標來訪問)

    NSString *str = array[2]; NSLog(@"%@",str);

數組遍歷:

    //第一種方式: 普通遍歷 -- 通過下表訪問 for (int i = 0; i < array.count; i++) { NSLog(@"%@",array[i]); } //第二種方式: 快速枚舉法--for循環的增強版 for (NSString *obj in array) { NSLog(@"%@",obj); } //第三種方式: 使用block進行遍歷 [array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { if (idx == 2) { //idx是下標 *stop = YES; }else{ NSLog(@"下標為:%ld 對象為%@",idx,obj); } }];

可變數組NSMutableArray

可變數組NSMutableArray 繼承於 不可變數組NSArray

    //1.創建一個空數組 NSMutableArray *array =[NSMutableArray array]; //2.維數組追加元素 [array addObject:@1]; //3.創建數組,添加多個元素 NSMutableArray *array2 = [NSMutableArray arrayWithCapacity:5]; //添加5個元素 [array2 addObject:@1]; array2[1] = @2; array2[2] = @3; array2[3] = @4; array2[4] = @5; //輸出數組 NSLog(@"%@",array2);

可變數組有而不可變數組沒有的一些操作:

    //插入 insert [array2 insertObject:@6 atIndex:0]; NSLog(@"%@",array2); //替換 replace [array2 replaceObjectAtIndex:0 withObject:@0]; NSLog(@"%@",array2); //刪除 remove [array2 removeLastObject]; NSLog(@"%@",array2); //是否包含 contain BOOL r = [array2 containsObject:@2]; //此方法有返回值 if (r) { NSLog(@"包含!"); } else { NSLog(@"不包含!"); } //交換元素 exchange [array2 exchangeObjectAtIndex:0 withObjectAtIndex:2]; NSLog(@"%@",array2);

一個典型的錯誤用法:

//        NSMutableArray *array =@[@1,@2,@3,@4,@5]; // [array addObject:@"hello"]; // NSLog(@"%@",array3);

注: 語法糖是為不可變對象設立的,如果創建可變對象時,使用語法糖,會報黃,創建之后,再為此空間添加對象,程序會拋出異常,因為在運行時,默認是不可變的數組.



文/請叫我大聖(簡書作者)
原文鏈接:http://www.jianshu.com/p/1ad327f56d1d
著作權歸作者所有,轉載請聯系作者獲得授權,並標注“簡書作者”。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM