數(shù)組:
系統(tǒng)提供的數(shù)組類:類似于C語言中的數(shù)組功能。
數(shù)組是一個(gè)大容器,數(shù)組中可以儲(chǔ)存不同的聯(lián)系對(duì)象,但必須要保證數(shù)組中儲(chǔ)存的都是對(duì)象。
OC中提供了兩類數(shù)組:一類是NSArray(不可變的數(shù)組),一類是NSMtableArray(可變數(shù)組)
可變與不可變的區(qū)別:可變意味著可以對(duì)原有對(duì)象進(jìn)行操作,不可變就意味著一旦創(chuàng)建,內(nèi)容就不可變。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 不可變數(shù)組
(1)使用初始化方法創(chuàng)建數(shù)組
NSArray *array = [NSArray ?alloc] initWithObjects:@"yangyu",@"yabaobao",@"dashazi",nil];
( 2 )使用便利構(gòu)造器方法創(chuàng)建方法
NSArray *array = [NSArray arrayWithObjects:@"yangyu",@"yabaobao",@"dashazi",nil];
( 3 ) 字面量方法
NSArray *array = @[@"haha",@"lala",@"dadda"];
/******數(shù)組元素個(gè)數(shù)******/
NSUInteger *count = array.count;
/******獲取數(shù)組元素*****/
NSString *name1 = [array objectAtIndex:0];
/****獲取數(shù)組元素字面量取法****/
NSString *name2 = array[2];
NSString *name3 = [array firstObject];
//數(shù)組元素為空的時(shí)候 ,使用firstObject以及l(fā)astObject保護(hù)程序的安全,不會(huì)崩潰,返回值是nil,但使用ObjectAtIndex時(shí),如果數(shù)組為空,則程序崩潰。
NSArray *nameArrayOne = [NSArray ?arrayWithObject:@"yuabobao",@"yagnbaobao",@"luboaboa",nil];
NSArray *nameArrayTwo = [NSArray ?arrayWithObject:@"xioapingguo",@"pig",@"monkey",nil];
//查找 yangbaobao對(duì)應(yīng)的下標(biāo)
NSUInteger index = [nameArrayOne ?indexObject:@"yangbaobao"];
//判斷數(shù)組中是否包含某個(gè)對(duì)象
BOOL ?isTure = [nameArrayOne containsObject:@"yubaobao"];
//判斷兩個(gè)數(shù)組是否相等
BOOL ieEqual = [nameArrayOne ?isEqualToArrayTwo];
//NSArray 和 NSString 之間轉(zhuǎn)換
NSString *string = @"www.lanou3g.com";
NSArray *array = [string componentsSeparatedByString:@"."];
NSLOg(@"%@",array);
//數(shù)組到字符串
NSArray *myArray = [NSArray arrayWithObjecta:@"北京",@"上海",@"廣州",@"鄭州",nil];
NSString *myString ?= [myArray componentsByString:@"&"];
? ? ? ? ? ? ? ? ? ? ? ? ? ?可變數(shù)組
以下方式都是創(chuàng)建一個(gè)可變空數(shù)組后再開辟容量為x的空間,數(shù)字x為幾開辟容量為x的空間;
Capacity:后面的數(shù)字。就是先開辟一個(gè)空間,用完
NSmutableArray *myArray = [NSMutableArray ?alloc] initWithCapacity:1];
NSmutableArray *youArray = [NSMutableArray ?arrayWithCapacity:1];
NSmutableArray *bigArray = [NSMutableArray ?array];
//添加一個(gè)數(shù)據(jù)
addObject:在數(shù)組的最后面添加
[bigArrat addObject:@"lanOu"];
//在指定位置插入一個(gè)元素
[bigArray insertObject:@"beijing" atIndex:1];
//刪除(刪除指定元素 主要是這個(gè)對(duì)象 ,有多少刪多少)
[bigArray removeObject:@"beijing"];
[bigArray removeObjectAtIndex:0];
//替換元素
[bigArray relaceObjectAtIndex:0 withObject@"shanghai"];
//交換指定位置的兩個(gè)元素
[bigArray exchangeObjectAtIndex:1 ?withObject:2];
//刪除全部
[bigArray removeAllObject];
? ? ? ? ?集合
集合 *不可變*
特點(diǎn):無序性 互異性,本質(zhì)上是一個(gè)大容器
NSSet *mySet = [[NSSet alloc]initWithObjects@:"aa",@"bb",@"cc",@"bb",@"dd",@"cc",nil];
//元素個(gè)數(shù)
NSUInteger count = mySet.count;
/獲取集合中的元素
NSString *string1 = [mySet AnyObject];
//NSArray *myArraty = mySet.allObjects;
? ? ? ? ? ? ? ?可變集合
可變集合占內(nèi)存
NSMutableSet *mySet = [[NSMutableSet alloc]initWithObjects:@"aa",@"bb",nil];
//添加元素
[mySet addObject:@"cc"];
[mySet addObject:@"bb"];
//刪除元素
[mySet removeObject:@"aa"];
字典(不可變)
字典:用來儲(chǔ)存具有一一對(duì)應(yīng)關(guān)系的數(shù)據(jù),本質(zhì)上也是一個(gè)大容器
字典里的數(shù)據(jù)成對(duì)存在。
字典本身是無序的但key->value 一一對(duì)應(yīng)是有序的
NSDictionary *dic = [[NSDictionary alloc]initWithObjectsAndKeys:@"xiaoYaLi",@"name",@"nan",@"sex",nil];
NSString *name = [dic objectForKey:@"name"];
NSString *sex = [dic objectForKey:@"sex"];
//便利構(gòu)造器方法
NSDictionary *dic = [NSDictionary dictionaryWithObjectaAndKeys:@"yaLibaoabo",@"name",@"nan",@"sex", nil];
字面量
NSDictonary *dic2 = @{@"name",@"xioaYaLi",@"sex",nan};
//key->value 一 一對(duì)應(yīng)。
/*********字典元素個(gè)數(shù)**********/
NSUInteger count = dic.2.count;
/***********將字典中所有的value放到一個(gè)數(shù)組中**********/
NSArray *value = dic2.allValues;
//字典取值
NSString *value = ]dic2 objectForKey:@"name"];
NSString *sex = [dic2 objecForKey:@"sex"];
//判斷字典是否為空;
BOOL a = dic2.allKeys.count == 0;
? ? ? ? ? ? ? ? 可變字典
NSMutableDictionary *dic2 = [NSMutableDictionary alloc] initWithObjectsAndKeys:@"zhangsan",@"name",@"nan",@"sex",nil];
//字典增加一個(gè)元素
[dic setObject:@"18" forKey:@"age"];
[dic setObject:@"jianzhou" forKey:@"city"];
//修改名字
[dic setObject:@"xioaYaLi" forKey:@"name"];
setObject: forKey: 工作原理:縣查找字典有沒有對(duì)應(yīng)的key值,如果有,則修改key對(duì)應(yīng)的value;如果沒有則把key-value作為元素添加到字典中。
//移除元素
dic removeObjectforKey:@"city"];
//移除所有元素
[dic removeAllObject];
? ? ? ? ? ? ? ? ? ? /********數(shù)組,字典,集合的區(qū)別********/
相同點(diǎn):都是oc中容器類,可以儲(chǔ)存多個(gè)元素,但是元素必須是對(duì)象,不限制對(duì)象 的類型。
不同點(diǎn):
1:使用場景:
數(shù)組:用來管理一組有序的元素集合
字典:用來管理一組具有一一對(duì)應(yīng)關(guān)系的數(shù)據(jù)的集合
集合:用來管理一組無序,并具有互異性的元素的集合
2:特點(diǎn)
數(shù)組:有序,并且元素可以重復(fù)使用。
字典:無序,key——value是在字典的一個(gè)元素,key是唯一的,一個(gè)key只能對(duì)應(yīng)一個(gè)value,但是一個(gè)value可以對(duì)應(yīng)多個(gè)key。
集合:無序,元素具有互異性
3:取值方式
數(shù)組:通過下標(biāo)獲取 元素
字典:通過key值,獲取元素;
集合:anyObject獲得一個(gè)數(shù)組 forin遍歷
數(shù)組嵌套數(shù)組
NSMutableArray * array1 = [NSMutableArray arrayWithObjects:@"11",@"222",@"3333", nil];
? ? ? NSMutableArray * array2 = [NSMutableArray arrayWithObjects:@"22",@"333",@"1234", nil];
?NSMutableArray * array = [NSMutableArray array];
?[array addObject:array1];
?[array addObject:array2];
? NSLog(@"%@",array);
NSMutableDictionary *dic1 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"zhangsan",@"name", nil];
NSMutableDictionary *dic2 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"lisi",@"name", nil];
?[array addObject:dic1];
[array addObject:dic2];
?NSMutableDictionary *dic3 = array[3];
創(chuàng)建一個(gè)空字典
NSMutableDictionary *myDic = [NSMutableDictionary dictionary];
[myDic setObject:array1 forKey:@"one"];
[myDic setObject:array2 forKey:@"two"];
?[myDic setObject:dic1 forKey:@"three"];
?[myDic setObject:dic2 forKey:@"four"];
?更加說明了字典是無序的