OC中数组、字典和集合解析(一)
容器类中只能存储对象,而在OC中属于容器类的有:数组、字典、集合
数组(数组是有序的、只能存储对象,但对象类型不限,可以是任意类型的对象。数组分为可变数组和不可变数组)
#不可变数组 (数组的元素不可改变)
创建不可变数组,以多个对象初始化不可变数组,多个对象之间用逗号隔开,以空对象结束
nil 《===》空对象 (相当于数组中的\0,代表结束,如果中间写nil数组后面的元素就不会显示)
//(初始化方法)
NSArray *initArray = [[NSArray alloc]initWithObjects:@"student",@"teacher",@"worker",nil];
NSLog(@"initArray = %@",initArray);
//不可变数组的遍历构造器方法
NSArray *initArray2 = [NSArray arrayWithObjects:@"xiaohua",@"xiaoming",@"xiaohong",nil];
NSLog(@"initArray2 = %@",initArray2);
//以一个数组,初始化一个新的数组,输出的内容是一样的(初始化)
NSArray *initArray3 = [[NSArray alloc]initWithArray:initArray2];
NSLog(@"initArray3 = %@",initArray3);
//字面量(初始化)
NSArray *initArray4 = @[@"tangseng",@"wukong",@"bajie"];
NSLog(@"initArray4 = %@",initArray4);
//功能方法
//获取元素个数
NSInteger count = [initArray4 count];
NSLog(@"count = %ld",count); //输出结果为3 ,因为上面定义initArray的元素个数为3个
//获取指定元素
NSString *str = [initArray4 objectAtIndex:1];
NSLog(@"str = %@",str); //输出结果为wukong因为上面定义的第二个元素为wukong,1代表第二个元素
//字面量 (利用数组的下标获取)
NSLog(@"2 = %@",initArray4[2]); //输出为bajie
//是否包含某个元素
BOOL flag = [initArray4 containsObject:@"shaseng"];
NSLog(@"flag = %d",flag); //输出结果为0,因为上面定义的元素里没有shaseng
//创建一个数组对象,遍历数组中所有元素
NSArray *testArray = @[@"wukong",@18,@"M",@170]; //("M"是合法的)
for (int i =0; i < testArray.count; i++) {
//id是万能指针,这里不需要加*,他可以接受任意类型的对象,使用id叫做多态,数组中经常会使用
id object = [testArray objectAtIndex:i];
NSLog(@"object = %@",object);
}
#可变数组(数组的元素可以改变)
//创建一个空的可变数组,并预留2个元素的空间
NSMutableArray *mInitArray =[[NSMutableArray alloc]initWithCapacity:2];
NSMutableArray *mInitArray1 = [@[@"校长",@"教授",@"老师"]mutableCopy];
NSLog(@"mInitArray1 = %@",mInitArray1); //输出的会是\U开头的加数字("\U6821\U957f"),不是乱码,所以最好数字里面写英文
//功能方法
//增
//添加元素
[mInitArray1 addObject:@"专家"];
NSLog(@"mInitArray1 = %@",mInitArray1);
NSMutableArray *mInitArray2 = [@[@"tangseng",@"wukong",@"bajie",@"shaseng"]mutableCopy];
NSLog(@"mInitArray2 = %@",mInitArray2);
//插入元素
//在指定下标处插入对象
[mInitArray2 insertObject:@"bailongma" atIndex:1];
NSLog(@"mInitArray = %@",mInitArray2);
//改
//交换 (根据下标来交换,不能根据对象,因为一个数组中可能有很多一样的对象)
//交换两个指定下标对应的对象 (在同一个数组内进行交换)
//count-1是代表下标-1
[mInitArray2 exchangeObjectAtIndex:0 withObjectAtIndex:mInitArray2.count-1];
NSLog(@"交换后:%@",mInitArray2);
//替换
//利用新对象替换指定下标处的对象 (数组以外的新对象替换数组以内的对象)
[mInitArray2 replaceObjectAtIndex:3 withObject:@"baigujing"];
NSLog(@"替换后的:%@",mInitArray2);
//删除
//删除指定对象
//注意:删除数组中所有指定对象(数组中包括的所有“baigujing”都会被删除)
// [mInitArray2 insertObject:@"baigujing" atIndex:0];
// NSLog(@" mInitArray2 = %@",mInitArray2);
[mInitArray2 removeObject:@"baigujing"];
NSLog(@"删除后:%@",mInitArray2);
//删除最后一个对象
[mInitArray2 removeLastObject];
NSLog(@"删除最后一个对象后:%@",mInitArray2);
//删除指定下标处的对象
[mInitArray2 removeObjectAtIndex:1];
NSLog(@"mInitArray2 = %@",mInitArray2);
//删除所有的对象 (删除对象后输出数组里的括号还是有的)
[mInitArray2 removeAllObjects];
NSLog(@"删除所有对象后:%@",mInitArray2);
//分割 (返回时是一个不可变的字符串)
NSString *str = @"www.lanou3g.com";
//按照指定的字符串,将原有字符串进行分割
//分割后的结果存在数组中
NSArray *resultArray = [str componentsSeparatedByString:@"."];
NSLog(@"分割后的结果为:%@",resultArray);
//拼接(返回时是一个不可变的字符串)
//将数组中的所有元素拼接,各元素之间用指定字符串隔开
//结果保存在新的字符串中
NSString *resultStr = [testArray componentsJoinedByString:@"--"];
NSLog(@"拼接后的结果为:%@",resultStr);
#字典 (字典也分为可变字典和不可变字典)
不可变字典
//创建对象
//以多个健值对(条目)创建一个新的字典
//键值对不能落单,且以nil结束
//每一对条目中,值在前,键在后(输出后键——值方式,且是以大括号括起来)
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);
//功能方法
//获取条目个数
NSInteger count = [initDict2 count];
NSLog(@"count = %ld",count);
//字典中只能通过键去获取对应的值
//字典中键必须是唯一的
//获取所有的键-key
NSArray *allKay = [initDict2 allKeys];
NSLog(@"allKay = %@",allKay);
//获取所有的值-value
NSArray *allValue = [initDict2 allValues];
NSLog(@"allValue= %@",allValue);
//通过key获取对应的value
NSString *name = [initDict2 objectForKey:@"name"];
NSLog(@"name =%@",name);
//字面量
NSLog(@"%@",initDict2[@"age"]);
//创建一个字典
//遍历字典中的条目
NSDictionary *testDict = @{@"name":@"wukong",@"age":@1000,@"sex":@"M"};
//获取所有Key值 testKey
NSArray *testKay =[testDict allKeys];