美文网首页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