------ Java教育訓練、Android教育訓練、iOS教育訓練、.Net教育訓練、期待與您交流! -------
一、NSArray類
[objc] view plain copy
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5Gcu82Yp9VRE90Qvw1c0V2czF2LcRXZu5ibkN3YuUGZvN2Lc9CX6MHc0RHaiojIsJye.png)
- //
- // main.m
- // 16_NSArray
- //
- // Created by jiangwei on 14-10-12.
- // Copyright (c) 2014年 jiangwei. All rights reserved.
- //
- #import <Foundation/Foundation.h>
- //NSArray中不可以存放基本資料類型,隻能存放類的執行個體,如果需要将基本類型、結構體放入到數組中得話,
- //需要通過NSNumber/NSValue進行資料的封裝,同時不能在NSArray中存儲nil
- int main(int argc, const charchar * argv[]) {
- @autoreleasepool {
- //1.---------------------數組的建立
- NSString *s1 = @"zhangsan";
- NSString *s2 = @"lisi";
- NSString *s3 = @"wangwu";
- //最後的nil相當于結束的标記
- NSArray *array1 = [[NSArray alloc] initWithObjects:s1,s2,s3, nil nil];
- //列印的時候會調用description方法
- //相當于:array1.description
- NSLog(@"%@",array1);
- //使用類方法建立
- array1 = [NSArray arrayWithObjects:s1,s2,s3, nil nil];
- //建立一個數組,将源數組中的資料拿出來放進去
- NSArray *array2 = [NSArray arrayWithArray:array1];
- //2.----------------------objectAtIndex
- //通路數組中的資料,數組中存放的是對象的指針
- NSString *str1 = [array1 objectAtIndex:0];
- //3.----------------------count
- //擷取數組元素中的個數
- NSUInteger count = [array1 count];//傳回的是一個無符号數值
- //4.----------------------containsObject
- //判斷數組中是否包含某一個對象,判斷的是指針對象值,不是對象中的值
- BOOL isContains = [array1 containsObject:@"zhangsan"];
- //5.----------------------indexOfObject
- //傳回一個對象在數組中的下标值
- NSUInteger index = [array1 indexOfObject:@"zhangsan"];
- if(index == NSNotFound){
- //沒有找到
- }else{
- //找到了
- }
- //6.----------------------componentsJoinedByString
- //數組中存放的如果是字元串的話,可以使用連接配接符将其所有的元素進行連接配接
- //注意數組中的元素必須都是字元串
- NSString *content = [array1 componentsJoinedByString:@","];
- //7.----------------------lastObject
- //通路數組最後一個元素
- NSString *lastObj = [array1 lastObject];
- //8.----------------------arrayByAddingObject
- //在原來的數組後面追加元素,傳回一個新的數組對象,因為他是不可變的
- NSArray *array3 = [array1 arrayByAddingObject:@"zhaoliu"];
- //數組的周遊
- for(int i=0;i<array1.count;i++){
- NSString *str = [array1 objectAtIndex:i];
- NSLog(@"%@",str);
- }
- //快速周遊
- for(NSString *s in array1){
- NSLog(@"%@",s);
- }
- //xcode4.4以後,編譯器對數組的建立和通路文法做了優化
- NSArray *array7 = @[s1,s2,s3];
- NSString *s = array7[0];
- }
- return 0;
- }
下面來看一下他的操作方法:
1、NSArray的建立
[objc] view plain copy
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5Gcu82Yp9VRE90Qvw1c0V2czF2LcRXZu5ibkN3YuUGZvN2Lc9CX6MHc0RHaiojIsJye.png)
- //1.---------------------數組的建立
- NSString *s1 = @"zhangsan";
- NSString *s2 = @"lisi";
- NSString *s3 = @"wangwu";
- //最後的nil相當于結束的标記
- NSArray *array1 = [[NSArray alloc] initWithObjects:s1,s2,s3, nil nil];
- //列印的時候會調用description方法
- //相當于:array1.description
- NSLog(@"%@",array1);
我們看到他的initWithObjects方法的最後一個值為nil,這個我們在之前說到過這個值,他是空指針的意思,和Java中的null一樣的,這裡為什麼在建立NSArray的時候最後一個值為空呢?這個和C語言中的場景是類似的,C語言中字元串的結束符為'/0',那麼這裡的NSArray的最後一個元素為nil,原因是标記NSArray結束了。
然後我們調用NSLog方法列印NSArray對象,結果:
我們看到了,會列印出非常格式化的資料出來,這個原因是因為NSLog列印對象的時候會調用其description方法,和Java中的toString方法一樣,當然我們可以重寫這個方法的,後面會說到。
我們還可以使用類方法建立NSArray:
[java] view plain copy
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5Gcu82Yp9VRE90Qvw1c0V2czF2LcRXZu5ibkN3YuUGZvN2Lc9CX6MHc0RHaiojIsJye.png)
- //使用類方法建立
- array1 = [NSArray arrayWithObjects:s1,s2,s3, nil];
- //建立一個數組,将源數組中的資料拿出來放進去
- NSArray *array2 = [NSArray arrayWithArray:array1];
2、使用下标通路元素
[objc] view plain copy
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5Gcu82Yp9VRE90Qvw1c0V2czF2LcRXZu5ibkN3YuUGZvN2Lc9CX6MHc0RHaiojIsJye.png)
- //2.----------------------objectAtIndex
- //通路數組中的資料,數組中存放的是對象的指針
- NSString *str1 = [array1 objectAtIndex:0];
3、擷取數組的大小
[objc] view plain copy
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5Gcu82Yp9VRE90Qvw1c0V2czF2LcRXZu5ibkN3YuUGZvN2Lc9CX6MHc0RHaiojIsJye.png)
- //3.----------------------count
- //擷取數組元素中的個數
- NSUInteger count = [array1 count];//傳回的是一個無符号數值
NSUInteger是無符号的int類型
4、是否包含某一個元素
[objc] view plain copy
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5Gcu82Yp9VRE90Qvw1c0V2czF2LcRXZu5ibkN3YuUGZvN2Lc9CX6MHc0RHaiojIsJye.png)
- //4.----------------------containsObject
- //判斷數組中是否包含某一個對象,判斷的是指針對象值,不是對象中的值
- BOOL isContains = [array1 containsObject:@"zhangsan"];
5、找到一個元素在數組中的下标
[java] view plain copy
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5Gcu82Yp9VRE90Qvw1c0V2czF2LcRXZu5ibkN3YuUGZvN2Lc9CX6MHc0RHaiojIsJye.png)
- //5.----------------------indexOfObject
- //傳回一個對象在數組中的下标值
- NSUInteger index = [array1 indexOfObject:@"zhangsan"];
- if(index == NSNotFound){
- //沒有找到
- }else{
- //找到了
- }
這裡我們看到用到了一個系統常量:NSNotFound,我們可以看到他的定義:
[objc] view plain copy
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5Gcu82Yp9VRE90Qvw1c0V2czF2LcRXZu5ibkN3YuUGZvN2Lc9CX6MHc0RHaiojIsJye.png)
- #define NSIntegerMax LONG_MAX
看到了,是一個Long類型的最大值。
6、使用指定的連接配接符連接配接數組中所有的元素
[java] view plain copy
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5Gcu82Yp9VRE90Qvw1c0V2czF2LcRXZu5ibkN3YuUGZvN2Lc9CX6MHc0RHaiojIsJye.png)
- //6.----------------------componentsJoinedByString
- //數組中存放的如果是字元串的話,可以使用連接配接符将其所有的元素進行連接配接
- //注意數組中的元素必須都是字元串
- NSString *content = [array1 componentsJoinedByString:@","];
7、在數組的尾部增加一個元素
[objc] view plain copy
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5Gcu82Yp9VRE90Qvw1c0V2czF2LcRXZu5ibkN3YuUGZvN2Lc9CX6MHc0RHaiojIsJye.png)
- //8.----------------------arrayByAddingObject
- //在原來的數組後面追加元素,傳回一個新的數組對象,因為他是不可變的
- NSArray *array3 = [array1 arrayByAddingObject:@"zhaoliu"];
因為NSArray是不可變的,是以會産生一個新的NSArray對象,傳回回來
8、數組的周遊
[objc] view plain copy
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5Gcu82Yp9VRE90Qvw1c0V2czF2LcRXZu5ibkN3YuUGZvN2Lc9CX6MHc0RHaiojIsJye.png)
- //數組的周遊
- for(int i=0;i<array1.count;i++){
- NSString *str = [array1 objectAtIndex:i];
- NSLog(@"%@",str);
- }
- //快速周遊
- for(NSString *s in array1){
- NSLog(@"%@",s);
- }
第二種方式和Java中的快速周遊是一樣的。
9、Xcode4.4之後新增了NSArray快速建立的一種方式
[objc] view plain copy
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5Gcu82Yp9VRE90Qvw1c0V2czF2LcRXZu5ibkN3YuUGZvN2Lc9CX6MHc0RHaiojIsJye.png)
- //xcode4.4以後,編譯器對數組的建立和通路文法做了優化
- NSArray *array7 = @[s1,s2,s3];
- NSString *s = array7[0];
這種方式比之前的建立方式又快又友善,而且符合正常的建立方式,通路的時候也是可以直接用下标進行擷取元素
二、NSMutableArray類
NSArray類是不可變的,NSMutableArray類是可變的,可變類一樣的特性,就是可以進行增删改查操作
[objc] view plain copy
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5Gcu82Yp9VRE90Qvw1c0V2czF2LcRXZu5ibkN3YuUGZvN2Lc9CX6MHc0RHaiojIsJye.png)
- //
- // main.m
- // 17_NSMutableArray
- //
- // Created by jiangwei on 14-10-12.
- // Copyright (c) 2014年 jiangwei. All rights reserved.
- //
- #import <Foundation/Foundation.h>
- //NSMutableArray繼承NSArray類,有NSArray中的所有方法
- int main(int argc, const charchar * argv[]) {
- @autoreleasepool {
- //1.---------------------建立可變數組
- NSString *str1 = @"zhangsan";
- NSString *str2 = @"lisi";
- NSString *str3 = @"wangwu";
- NSMutableArray *mArray1 = [[NSMutableArray alloc] initWithObjects:str1,str2,str3, nil nil];
- //下面的這種方式建立的數組是錯誤的
- //下面的這種方式是建立不可變數組的方式,不能喲關于可變數組的建立
- //NSMutableArray *array1 = @[str1,str2,str3];
- //先開辟5個空間,用于存儲元素,當存儲的元素超過了5個,數組會自動增大空間
- NSMutableArray *mArray2 = [[NSMutableArray alloc] initWithCapacity:5];
- //使用類方法建立
- NSMutableArray *mArray3 = [NSMutableArray arrayWithCapacity:5];
- //2.---------------------addObject
- //添加元素的方法
- [mArray1 addObject:str1];
- [mArray1 addObject:str2];
- //添加數組,把mArray1中的所有元素全部添加到mArray2中
- [mArray2 addObjectsFromArray:mArray1];
- NSLog(@"mArray3 = %@",mArray2);
- //二維數組
- //這個是将mArray1添加到mArray2數組中,這樣mArray2就變成了二維數組了
- [mArray2 addObject:mArray1];
- //3.---------------------insertObject
- //在指定的位置上插入特定元素
- [mArray2 insertObject:@"def" atIndex:0];
- //4.---------------------replaceObjectAdIdex
- //替換元素
- [mArray2 replaceObjectAtIndex:0 withObject:@"aaa"];
- //5.---------------------exchangeObjectAtIndex
- //互換兩個元素的位置
- [mArray2 exchangeObjectAtIndex:0 withObjectAtIndex:3];
- //6.---------------------removeObjectAdIndex
- //删除指定位置的元素
- [mArray2 removeObjectAtIndex:0];
- //删除最後一個元素
- [mArray2 removeLastObject];
- //删除指定的對象
- [mArray2 removeObject:@"lisi"];
- //删除所有的對象/清空清單
- [mArray2 removeAllObjects];
- }
- return 0;
- }
1、建立方法
[objc] view plain copy
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5Gcu82Yp9VRE90Qvw1c0V2czF2LcRXZu5ibkN3YuUGZvN2Lc9CX6MHc0RHaiojIsJye.png)
- //1.---------------------建立可變數組
- NSString *str1 = @"zhangsan";
- NSString *str2 = @"lisi";
- NSString *str3 = @"wangwu";
- NSMutableArray *mArray1 = [[NSMutableArray alloc] initWithObjects:str1,str2,str3, nil nil];
- //下面的這種方式建立的數組是錯誤的
- //下面的這種方式是建立不可變數組的方式,不能用于可變數組的建立
- //NSMutableArray *array1 = @[str1,str2,str3];
- //先開辟5個空間,用于存儲元素,當存儲的元素超過了5個,數組會自動增大空間
- NSMutableArray *mArray2 = [[NSMutableArray alloc] initWithCapacity:5];
- //使用類方法建立
- NSMutableArray *mArray3 = [NSMutableArray arrayWithCapacity:5];
建立方式和NSArray類似,但是有一種方式不能用,就是直接建立的方式,那個隻能用于建立不變數組。
但是可變數組還有一個方法就是能夠事先的設定數組的大小,而且超過這個大小之後,數組會自動擴充,類似于C語言中的動态數組的實作。
2、添加元素
[objc] view plain copy
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5Gcu82Yp9VRE90Qvw1c0V2czF2LcRXZu5ibkN3YuUGZvN2Lc9CX6MHc0RHaiojIsJye.png)
- //2.---------------------addObject
- //添加元素的方法
- [mArray1 addObject:str1];
- [mArray1 addObject:str2];
- //添加數組,把mArray1中的所有元素全部添加到mArray2中
- [mArray2 addObjectsFromArray:mArray1];
- NSLog(@"mArray3 = %@",mArray2);
- //二維數組
- //這個是将mArray1添加到mArray2數組中,這樣mArray2就變成了二維數組了
- [mArray2 addObject:mArray1];
- NSLog(@"mArray3 = %@",mArray2);
使用addObjectsFromArray方法是将一個數組中的每個元素添加到指定的數組中
使用addObject方法是講一個數組整個都添加到指定的數組中了,那麼這個數組就變成二維數組了
這個兩個方法要區分一下~~
下面是運作結果:
3、在數組的指定位置上插入元素
[java] view plain copy
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5Gcu82Yp9VRE90Qvw1c0V2czF2LcRXZu5ibkN3YuUGZvN2Lc9CX6MHc0RHaiojIsJye.png)
- //3.---------------------insertObject
- //在指定的位置上插入特定元素
- [mArray2 insertObject:@"def" atIndex:0];
4、替換元素
[java] view plain copy
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5Gcu82Yp9VRE90Qvw1c0V2czF2LcRXZu5ibkN3YuUGZvN2Lc9CX6MHc0RHaiojIsJye.png)
- //4.---------------------replaceObjectAdIdex
- //替換元素
- [mArray2 replaceObjectAtIndex:0 withObject:@"aaa"];
5、互換兩個元素的位置
[objc] view plain copy
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5Gcu82Yp9VRE90Qvw1c0V2czF2LcRXZu5ibkN3YuUGZvN2Lc9CX6MHc0RHaiojIsJye.png)
- //5.---------------------exchangeObjectAtIndex
- //互換兩個元素的位置
- [mArray2 exchangeObjectAtIndex:0 withObjectAtIndex:3];
6、删除方法
[objc] view plain copy
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5Gcu82Yp9VRE90Qvw1c0V2czF2LcRXZu5ibkN3YuUGZvN2Lc9CX6MHc0RHaiojIsJye.png)
- //6.---------------------removeObjectAdIndex
- //删除指定位置的元素
- [mArray2 removeObjectAtIndex:0];
- //删除最後一個元素
- [mArray2 removeLastObject];
- //删除指定的對象
- [mArray2 removeObject:@"lisi"];
- //删除所有的對象/清空清單
- [mArray2 removeAllObjects];