美文网首页iOS Developer
OC中数组、字典和集合解析(一)

OC中数组、字典和集合解析(一)

作者: WilliamChou_ | 来源:发表于2016-03-25 20:30 被阅读526次

容器类中只能存储对象,而在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];

相关文章

网友评论

    本文标题:OC中数组、字典和集合解析(一)

    本文链接:https://www.haomeiwen.com/subject/yhldlttx.html