今天記錄一下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];