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因为上面定义的第二个元素为wukong1代表第二个元素

    

    //字面量  (利用数组的下标获取)

    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];


    //通过Key访问Value

    for (int i =0; i<testKay.count; i++) {

        id key = testKay[i];

        id value= [testDict objectForKey:key];

        NSLog(@"object = %@",value);

    }



可变字典

//创建一个空的可变字典,预留两个条目的空间

    NSMutableDictionary *mInitDict = [[NSMutableDictionary alloc]initWithCapacity:2];

    

    //创建一个空的可变字典

    NSMutableDictionary *mInitDict1 =[[NSMutableDictionary alloc]init];

    

    //字面量

    NSMutableDictionary*mInitDict2=[@{@"name":@"sunwukong",@"age":@18,@"sex":@"F"}mutableCopy];

    NSLog(@"mInitDict2 = %@",mInitDict2);

    

    

    //功能方法

    //添加条目

    //前面是值(value),后面是键(key

    //注意:值和键不能为nil

    [mInitDict2 setObject:@0.01 forKey:@"salary"];

    NSLog(@"添加后: = %@",mInitDict2);

    

    //修改方法

    [mInitDict2 setObject:@0.1 forKey:@"salary"];

    NSLog(@"修改后: =%@",mInitDict2);

    

    //当字典中。没有对应的key值时,将会添加相应的键值对

    //如果有对应的key值,则对key对应的value进行修改

    //字典中无法修改key

    

    //字面量的添加和修改

    //key值存在,则修改

    //key不存在,则添加

    mInitDict2[@"height"] = @167;

    NSLog(@"字面量添加后:%@",mInitDict2);

    mInitDict2[@"height"]=@666;

    NSLog(@"字面量修改后:%@",mInitDict2);

    

    //不是字典类的方法,但是可以对字典操作

    //setObjectforKey的功能相似

    //值可以为nil,删除key值对应的条目

    [mInitDict2 setValue:@64 forKey:@"weight"];

    NSLog(@"添加后:%@",mInitDict2);

    

    [mInitDict2 setValue:nil forKey:@"weight"];

    NSLog(@"设置nil%@",mInitDict2);

    

    //删除

    //删除key值对应的条目

    [mInitDict2 removeObjectForKey:@"height"];

    NSLog(@"删除后 = %@",mInitDict2);

    

    //删除所有条目

    [mInitDict2 removeAllObjects];

    NSLog(@"删除所有后:%@",mInitDict2);


#集合(集合也分为可变集合和不可变集合)

集合具有互斥性、无序性,集合中不可有相同的对象,对象之间没有顺序,可变集合和不可变集合里面是元素的可变与不可变


不可变集合

    //创建对象

    //用多个对象来创建集合

    //注意:当有多个相同对象时,只添加一个

    NSSet *initSet =[[NSSet alloc]initWithObjects:@"teacher",@"student",@"worker", nil];

    NSLog(@"initStr = %@",initSet);

    NSSet *initStr1 = [NSSet setWithObjects:@"Teacher",@"Student",nil];

    NSLog(@"initSet1 = %@",initStr1);

    //获取元素个数功能方法

    NSInteger count = [initStr1 count];

    NSLog(@"count = %ld",count);

    //获取任意元素

    //没有任何规律,不是随机

    NSString *str =[initStr1 anyObject];

    NSLog(@"str = %@",str);

    //是否包含

    BOOL flag = [initStr1 containsObject:@"Person"];

    NSLog(@"flag =%d",flag);

    //获取所有元素

    NSArray *array = [initStr1 allObjects];

    NSLog(@"array = %@",array);



可变集合

NSMutableSet *mInitSet = [[NSMutableSet alloc]initWithCapacity:2];

    

    //添加 (再次添加后输出时还是只有一个,但是不会报错)

    [mInitSet addObject:@"xiaohong"];

    NSLog(@"mInitSet = %@",mInitSet);

    //重复添加是无效的,但是不会报错

    [mInitSet addObject:@"xiaohuang"];

    NSLog(@"mInitSet = %@",mInitSet);

    

    //删除

    [mInitSet removeObject:@"xiaohong"];

    NSLog(@"mInitSet = %@",mInitSet);

    

    //删除所有

    [mInitSet removeAllObjects];

    NSLog(@"mInitSet = %@",mInitSet);



















  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值