数组:
系统提供的数组类:类似于C语言中的数组功能。
数组是一个大容器,数组中可以储存不同的联系对象,但必须要保证数组中储存的都是对象。
OC中提供了两类数组:一类是NSArray(不可变的数组),一类是NSMtableArray(可变数组)
可变与不可变的区别:可变意味着可以对原有对象进行操作,不可变就意味着一旦创建,内容就不可变。
不可变数组
(1)使用初始化方法创建数组
NSArray *array = [NSArray alloc] initWithObjects:@"yangyu",@"yabaobao",@"dashazi",nil];
( 2 )使用便利构造器方法创建方法
NSArray *array = [NSArray arrayWithObjects:@"yangyu",@"yabaobao",@"dashazi",nil];
( 3 ) 字面量方法
NSArray *array = @[@"haha",@"lala",@"dadda"];
/******数组元素个数******/
NSUInteger *count = array.count;
/******获取数组元素*****/
NSString *name1 = [array objectAtIndex:0];
/****获取数组元素字面量取法****/
NSString *name2 = array[2];
NSString *name3 = [array firstObject];
//数组元素为空的时候 ,使用firstObject以及lastObject保护程序的安全,不会崩溃,返回值是nil,但使用ObjectAtIndex时,如果数组为空,则程序崩溃。
NSArray *nameArrayOne = [NSArray arrayWithObject:@"yuabobao",@"yagnbaobao",@"luboaboa",nil];
NSArray *nameArrayTwo = [NSArray arrayWithObject:@"xioapingguo",@"pig",@"monkey",nil];
//查找 yangbaobao对应的下标
NSUInteger index = [nameArrayOne indexObject:@"yangbaobao"];
//判断数组中是否包含某个对象
BOOL isTure = [nameArrayOne containsObject:@"yubaobao"];
//判断两个数组是否相等
BOOL ieEqual = [nameArrayOne isEqualToArrayTwo];
//NSArray 和 NSString 之间转换
NSString *string = @"www.lanou3g.com";
NSArray *array = [string componentsSeparatedByString:@"."];
NSLOg(@"%@",array);
//数组到字符串
NSArray *myArray = [NSArray arrayWithObjecta:@"北京",@"上海",@"广州",@"郑州",nil];
NSString *myString = [myArray componentsByString:@"&"];
可变数组
以下方式都是创建一个可变空数组后再开辟容量为x的空间,数字x为几开辟容量为x的空间;
Capacity:后面的数字。就是先开辟一个空间,用完
NSmutableArray *myArray = [NSMutableArray alloc] initWithCapacity:1];
NSmutableArray *youArray = [NSMutableArray arrayWithCapacity:1];
NSmutableArray *bigArray = [NSMutableArray array];
//添加一个数据
addObject:在数组的最后面添加
[bigArrat addObject:@"lanOu"];
//在指定位置插入一个元素
[bigArray insertObject:@"beijing" atIndex:1];
//删除(删除指定元素 主要是这个对象 ,有多少删多少)
[bigArray removeObject:@"beijing"];
[bigArray removeObjectAtIndex:0];
//替换元素
[bigArray relaceObjectAtIndex:0 withObject@"shanghai"];
//交换指定位置的两个元素
[bigArray exchangeObjectAtIndex:1 withObject:2];
//删除全部
[bigArray removeAllObject];
集合
集合 *不可变*
特点:无序性 互异性,本质上是一个大容器
NSSet *mySet = [[NSSet alloc]initWithObjects@:"aa",@"bb",@"cc",@"bb",@"dd",@"cc",nil];
//元素个数
NSUInteger count = mySet.count;
/获取集合中的元素
NSString *string1 = [mySet AnyObject];
//NSArray *myArraty = mySet.allObjects;
可变集合
可变集合占内存
NSMutableSet *mySet = [[NSMutableSet alloc]initWithObjects:@"aa",@"bb",nil];
//添加元素
[mySet addObject:@"cc"];
[mySet addObject:@"bb"];
//删除元素
[mySet removeObject:@"aa"];
字典(不可变)
字典:用来储存具有一一对应关系的数据,本质上也是一个大容器
字典里的数据成对存在。
字典本身是无序的但key->value 一一对应是有序的
NSDictionary *dic = [[NSDictionary alloc]initWithObjectsAndKeys:@"xiaoYaLi",@"name",@"nan",@"sex",nil];
NSString *name = [dic objectForKey:@"name"];
NSString *sex = [dic objectForKey:@"sex"];
//便利构造器方法
NSDictionary *dic = [NSDictionary dictionaryWithObjectaAndKeys:@"yaLibaoabo",@"name",@"nan",@"sex", nil];
字面量
NSDictonary *dic2 = @{@"name",@"xioaYaLi",@"sex",nan};
//key->value 一 一对应。
/*********字典元素个数**********/
NSUInteger count = dic.2.count;
/***********将字典中所有的value放到一个数组中**********/
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];
//字典增加一个元素
[dic setObject:@"18" forKey:@"age"];
[dic setObject:@"jianzhou" forKey:@"city"];
//修改名字
[dic setObject:@"xioaYaLi" forKey:@"name"];
setObject: forKey: 工作原理:县查找字典有没有对应的key值,如果有,则修改key对应的value;如果没有则把key-value作为元素添加到字典中。
//移除元素
dic removeObjectforKey:@"city"];
//移除所有元素
[dic removeAllObject];
/********数组,字典,集合的区别********/
相同点:都是oc中容器类,可以储存多个元素,但是元素必须是对象,不限制对象 的类型。
不同点:
1:使用场景:
数组:用来管理一组有序的元素集合
字典:用来管理一组具有一一对应关系的数据的集合
集合:用来管理一组无序,并具有互异性的元素的集合
2:特点
数组:有序,并且元素可以重复使用。
字典:无序,key——value是在字典的一个元素,key是唯一的,一个key只能对应一个value,但是一个value可以对应多个key。
集合:无序,元素具有互异性
3:取值方式
数组:通过下标获取 元素
字典:通过key值,获取元素;
集合:anyObject获得一个数组 forin遍历
数组嵌套数组
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];
创建一个空字典
NSMutableDictionary *myDic = [NSMutableDictionary dictionary];
[myDic setObject:array1 forKey:@"one"];
[myDic setObject:array2 forKey:@"two"];
[myDic setObject:dic1 forKey:@"three"];
[myDic setObject:dic2 forKey:@"four"];
更加说明了字典是无序的