容器類中只能存儲對象挚歧,而在OC中屬于容器類的有:數(shù)組扛稽、字典、集合
數(shù)組(數(shù)組是有序的滑负、只能存儲對象在张,但對象類型不限,可以是任意類型的對象矮慕。數(shù)組分為可變數(shù)組和不可變數(shù)組)
#不可變數(shù)組 (數(shù)組的元素不可改變)
創(chuàng)建不可變數(shù)組帮匾,以多個對象初始化不可變數(shù)組,多個對象之間用逗號隔開痴鳄,以空對象結(jié)束
nil 《===》空對象 (相當(dāng)于數(shù)組中的\0瘟斜,代表結(jié)束,如果中間寫nil數(shù)組后面的元素就不會顯示)
//(初始化方法)
NSArray *initArray = [[NSArray alloc]initWithObjects:@"student",@"teacher",@"worker",nil];
NSLog(@"initArray = %@",initArray);
//不可變數(shù)組的遍歷構(gòu)造器方法
NSArray *initArray2 = [NSArray arrayWithObjects:@"xiaohua",@"xiaoming",@"xiaohong",nil];
NSLog(@"initArray2 = %@",initArray2);
//以一個數(shù)組痪寻,初始化一個新的數(shù)組螺句,輸出的內(nèi)容是一樣的(初始化)
NSArray *initArray3 = [[NSArray alloc]initWithArray:initArray2];
NSLog(@"initArray3 = %@",initArray3);
//字面量(初始化)
NSArray *initArray4 = @[@"tangseng",@"wukong",@"bajie"];
NSLog(@"initArray4 = %@",initArray4);
//功能方法
//獲取元素個數(shù)
NSInteger count = [initArray4 count];
NSLog(@"count = %ld",count);? //輸出結(jié)果為3 ,因為上面定義initArray的元素個數(shù)為3個
//獲取指定元素
NSString *str = [initArray4 objectAtIndex:1];
NSLog(@"str = %@",str);? //輸出結(jié)果為wukong因為上面定義的第二個元素為wukong橡类,1代表第二個元素
//字面量? (利用數(shù)組的下標(biāo)獲取)
NSLog(@"2 = %@",initArray4[2]);? //輸出為bajie
//是否包含某個元素
BOOL flag = [initArray4 containsObject:@"shaseng"];
NSLog(@"flag = %d",flag);? //輸出結(jié)果為0蛇尚,因為上面定義的元素里沒有shaseng
//創(chuàng)建一個數(shù)組對象,遍歷數(shù)組中所有元素
NSArray *testArray = @[@"wukong",@18,@"M",@170]; //("M"是合法的)
for (int i =0; i < testArray.count; i++) {
//id是萬能指針顾画,這里不需要加*,他可以接受任意類型的對象,使用id叫做多態(tài)取劫,數(shù)組中經(jīng)常會使用
id object = [testArray objectAtIndex:i];
NSLog(@"object = %@",object);
}
#可變數(shù)組(數(shù)組的元素可以改變)
//創(chuàng)建一個空的可變數(shù)組,并預(yù)留2個元素的空間
NSMutableArray? *mInitArray =[[NSMutableArray alloc]initWithCapacity:2];
NSMutableArray *mInitArray1 = [@[@"校長",@"教授",@"老師"]mutableCopy];
NSLog(@"mInitArray1 = %@",mInitArray1); //輸出的會是\U開頭的加數(shù)字("\U6821\U957f")研侣,不是亂碼谱邪,所以最好數(shù)字里面寫英文
//功能方法
//增
//添加元素
[mInitArray1 addObject:@"專家"];
NSLog(@"mInitArray1 = %@",mInitArray1);
NSMutableArray *mInitArray2 = [@[@"tangseng",@"wukong",@"bajie",@"shaseng"]mutableCopy];
NSLog(@"mInitArray2 = %@",mInitArray2);
//插入元素
//在指定下標(biāo)處插入對象
[mInitArray2 insertObject:@"bailongma" atIndex:1];
NSLog(@"mInitArray = %@",mInitArray2);
//改
//交換 (根據(jù)下標(biāo)來交換,不能根據(jù)對象庶诡,因為一個數(shù)組中可能有很多一樣的對象)
//交換兩個指定下標(biāo)對應(yīng)的對象 (在同一個數(shù)組內(nèi)進(jìn)行交換)
//count-1是代表下標(biāo)-1
[mInitArray2 exchangeObjectAtIndex:0 withObjectAtIndex:mInitArray2.count-1];
NSLog(@"交換后:%@",mInitArray2);
//替換
//利用新對象替換指定下標(biāo)處的對象 (數(shù)組以外的新對象替換數(shù)組以內(nèi)的對象)
[mInitArray2 replaceObjectAtIndex:3 withObject:@"baigujing"];
NSLog(@"替換后的:%@",mInitArray2);
//刪除
//刪除指定對象
//注意:刪除數(shù)組中所有指定對象(數(shù)組中包括的所有“baigujing”都會被刪除)
//? ? [mInitArray2 insertObject:@"baigujing" atIndex:0];
//? ? NSLog(@" mInitArray2 = %@",mInitArray2);
[mInitArray2 removeObject:@"baigujing"];
NSLog(@"刪除后:%@",mInitArray2);
//刪除最后一個對象
[mInitArray2 removeLastObject];
NSLog(@"刪除最后一個對象后:%@",mInitArray2);
//刪除指定下標(biāo)處的對象
[mInitArray2 removeObjectAtIndex:1];
NSLog(@"mInitArray2 = %@",mInitArray2);
//刪除所有的對象 (刪除對象后輸出數(shù)組里的括號還是有的)
[mInitArray2 removeAllObjects];
NSLog(@"刪除所有對象后:%@",mInitArray2);
//分割 (返回時是一個不可變的字符串)
NSString *str = @"www.lanou3g.com";
//按照指定的字符串虾标,將原有字符串進(jìn)行分割
//分割后的結(jié)果存在數(shù)組中
NSArray *resultArray = [str componentsSeparatedByString:@"."];
NSLog(@"分割后的結(jié)果為:%@",resultArray);
//拼接(返回時是一個不可變的字符串)
//將數(shù)組中的所有元素拼接,各元素之間用指定字符串隔開
//結(jié)果保存在新的字符串中
NSString *resultStr = [testArray componentsJoinedByString:@"--"];
NSLog(@"拼接后的結(jié)果為:%@",resultStr);
#字典 (字典也分為可變字典和不可變字典)
不可變字典
//創(chuàng)建對象
//以多個健值對(條目)創(chuàng)建一個新的字典
//鍵值對不能落單,且以nil結(jié)束
//每一對條目中璧函,值在前傀蚌,鍵在后(輸出后鍵——值方式,且是以大括號括起來)
NSDictionary *initDict = [[NSDictionary alloc]initWithObjectsAndKeys:@"sunwukong",@"name",@18,@"age",@"F",@"sex", nil];
NSLog(@"initDict = %@",initDict);
//字面量
//多個鍵值對之間用逗號隔開
//鍵與值之間用冒號隔開? 鍵在前 蘸吓,值在后
NSDictionary *initDict2 = @{@"name":@"xiaowang",@"age":@10,@"sex":@"M"};
NSLog(@"initDict2 = %@",initDict2);
//功能方法
//獲取條目個數(shù)
NSInteger count = [initDict2 count];
NSLog(@"count = %ld",count);
//字典中只能通過鍵去獲取對應(yīng)的值
//字典中鍵必須是唯一的
//獲取所有的鍵-key
NSArray *allKay = [initDict2 allKeys];
NSLog(@"allKay = %@",allKay);
//獲取所有的值-value
NSArray *allValue = [initDict2 allValues];
NSLog(@"allValue= %@",allValue);
//通過key獲取對應(yīng)的value
NSString *name = [initDict2 objectForKey:@"name"];
NSLog(@"name =%@",name);
//字面量
NSLog(@"%@",initDict2[@"age"]);
//創(chuàng)建一個字典
//遍歷字典中的條目
NSDictionary *testDict = @{@"name":@"wukong",@"age":@1000,@"sex":@"M"};
//獲取所有Key值 testKey
NSArray *testKay =[testDict allKeys];