OC_NSArray和NSMutableArray

今天記錄一下OC中的數組,肯定的會相對于C語言的數組來對比!下面就來簡單地對比一下:

C和OC的數組差別

//C的數組,只能存一種類型,OC的數組,可以同時保存不同類型的對象

//C的數組,一般保存基本數據類型,OC的數組,只能保存對象

C:int num[10];

1、NSArray的實例化(與NSString同理分為類方法和alloc

init方法,以nil為結尾)

[objc]view plaincopy

NSArray*classArray?=?[NSArrayarrayWithObjects:@"AA",@"BB",[UIColorBuleColor],nil];//類方法

NSArray*classArray?=@[@“”,@“”]//簡寫,快速創建一個數組

在此順便的補充一下:

在NSLog 是 如果見到(? ), 那就說明這是一個數組

2、數組的長度

[objc]view plaincopy

intcount?=?[classArraycount];

3、提取數組中某一個下標的元素

[objc]view plaincopy

NSString*arrStr0=?[classArrayobjectAtIndex:0];

4、數組的遍歷

4.1 for循環遍歷,比較好理解

[objc]view plaincopy

for(inti?=0;i<[classArraycount];i++)

{

NSLog(@"%@",[classArrayobjectAtIndex:i]);

或者:

NSLog(@"%@",classArray[i]);//這是數組快速取值的方法,等同于上面的方法

}

4.2快速遍歷for in遍歷,這里的NSString*tempStr在我們清楚數組中的對象是什么類型的時候,可以直接這樣寫,如果不確定的話,或多類型見

4.4

[objc]view plaincopy

for(NSString*tempStr?in?classArray)

{

NSLog(@"%@",tempStr);

}

4.3bolck遍歷法

[objc]view plaincopy

NSArray*arr=@[@"a",@[@"AA",@"BB"],@"c",];

[arrenumerateObjectsUsingBlock:^(idobj,?NSUInteger?idx,BOOLBOOL*stop)

{//每遍歷一個元素都會把當前元素obj和元素位置idx當做參數傳給bolck

if(idx==0)//停止?OR做點一想做的事情

{

*stop=YES;

}

}];

4.4多類型對象時遍歷

//當數組中存的元素類型不只是一個類的對象時,遍歷要用id來接收

[objc]view plaincopy

for(idtemp?in?arr)

{//判斷一個對象能否相應某種方法

if([temprespondsToSelector:@selector(length)])

{//如果能響應length說明這次循環找到的temp對象是個字符串

NSLog(@"字符串長度是%d",[templength]);

}

if([temprespondsToSelector:@selector(count)])

{//如果能響應count說明這次循環找到的temp對象是個數組

NSLog(@"數組長度是%d",[tempcount]);

}

}

4.5快速找出元素位置,也就是我們一般說的索引

[objc]view plaincopy

NSArray*arr=@[@"a",@"b",@"c",];

inti?=[arrindexOfObject:@"b"];

5、截取字符串(同NSString一樣,不可變數組操作會生成的數組或者字符串)

[objc]view plaincopy

NSString*str?=@"i?like?iOS,啦啦啦";

5.1通過參數的內容,把這個字符串,截成一個數組

NSArray*strArr=[strcomponentsSeparatedByString:@"?"];//通過空格截取,結果strArr[@"i",@"like",@"iOS,啦啦啦"]

5.2把數組每一位的字符串拼起來成為一個新的字符串

NSString*finalStr?=?[strArrcomponentsJoinedByString:@""];//會重新平成一個同str一樣的字符串

6、一次性截集合中得每個

NSString*setStr?=@"";

6.1、設計好的想要切掉的內容的集合,把字符串切成數組,切的時候會根據集合中得字符逐字比較,全部都切

NSArray*setArr?=?[setStrcomponentsSeparatedByCharactersInSet:[NSCharacterSetcharacterSetWithCharactersInString:@"<>?"]];

結果是這個樣子滴:

(

"",

abcd,

1234,

z3c5,

8jnh,

""

)

------------------------------------------------------哎呀!看這里有一條分割線--------------------------------------------------

接下來要說的 肯定是NSArray的子類NSMutableArray,同MSMutableString一樣增加了操作數組更加方便的方法.要對比著學習,這樣會學得更快.

1、實例化:同理用Capacity初始化,也有兩種實例化方法

[objc]view plaincopy

//alloc

NSMutableArray*muArr?=?[[NSMutableArrayalloc]initWithCapacity:0];

//類

NSMutableArray*classMuArr?=?[NSMutableArrayarrayWithCapacity:0];

[objc]view plaincopy

2、增,同理往進裝,操作方法和可變字符串差不多,數組操作的時對象Object

[muArraddObject:@"AA"]

3.插入。像塞進去的感覺一樣

[muArrinsertObject:@"CC"atIndex:1];

4、改

[muArrreplaceObjectAtIndex:0withObject:@"mm"];

5、刪

5.1、刪除最后一個對象

[muArrremoveLastObject];

5.2、刪除特定位置(下標)的對象

[muArrremoveObjectAtIndex:0];

5.3、刪除特定對象(只要內同為@"ll”,全部刪除)

[muArr?removeObject:@"ll"];

5.4、全刪

[muArrremoveAllObjects];

6、可變數組的交換,方法只能用在可變數組(下標1和2交換)

[muArrexchangeObjectAtIndex:1withObjectAtIndex:2];

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容