Foundation框架---“集合类”

引用块内容

集合类

1.NSArray 和 NSMutableArray
2.NSSet 和 NSMutableSet
3.NSDictionary 和 NSMutableDictionary

1.NSArray 和 NSMutableArray

  1. NSArray:不可变数组
  2. NSMutableArray可变数组

NSArray:

NSArray数组的创建

    NSArray *array1 = [NSArray arrayWithObject:@"chenfanfang"];
    //nil是数组元素结束的标记
    NSArray *array2 = [NSArray arrayWithObjects:@"chenfanfang", nil];
    NSArray *array3 = @"chenfanfang"; //推荐用这种方法
    NSArray *array4 = [[NSArray alloc]initWithObjects:@"chenfanfang",nil];
    //根据编译器特性,常用以下的这个方法创建数组
    NSArray *array5 = @[@"chenfanfang1",@"chenfanfang2"];


查看array元素的个数

    int length1 = [array1 count];
    int length2 = array1.count;

根据下标获取数组的某元素

    [array1 objectAtIndex:0];
    array1[0];//这中方法简便

数组的遍历

方法1:普通for循环遍历
    for (int i = 0; i < array1.count; i++) {
        NSLog(@"%@",array1[i]);
    }
方法2:快速遍历
    //快速遍历

    for(id obj in array1){
        NSLog(@"%@",obj);

        //找出obj元素在数组中的位置
        NSUInteger i = [array1 indexOfObject:obj];
        NSLog(@"%ld",i);
    }
方法3:用block来遍历数组
    NSArray *array1 = @[@"chenfanfang1",@"chenfanfang2"];
    [array1 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        NSLog(@"%d",idx);
        NSLog(@"%@",obj);
        if(idx == 0){
        //停止遍历
        *stop = YES;
        }
    }];

每遍历到一个元素,就会调用一次block,并且当前元素和索引位置当作参数传递给block

NSMutableArray:

NSMutableArray对象的创建

    NSMutableArray *muArray1 = [NSMutableArray array];//空数组
    NSMutableArray *muArray2 = [[NSMutableArray alloc]init];//空数组
    NSMutableArray *muArray3 = [NSMutableArray arrayWithObjects:@"chenfanfang1",@"chenfanfang2", nil];

添加元素

[muArray1 addObject:<#(id)#>];

删除元素

    //删除数组中所有元素
    [muArray1 removeAllObjects];
    //删除指定对象
    [muArray1 removeObject:@"chenfanfang"];
    //根据下标删除元素
    [muArray1 removeObjectAtIndex:0];

注意事项

@[ ]的返回值是NSArray类型,只用于创建不可变数组,不能用雨NSMutableArray

    //正确做法
    NSArray *array1 = @[@"chenfanfang1",@"chenfanfang2"];
    //错误做法
    NSMutableArray *[array2 = @[@"chenfanfang1",@"chenfanfang2"];

NSSet和NSMutableSet

NSSet:无顺序的数组,其用法和NSArray相似
NSMutableSet的用法也和NSMutableArray相似

    //NSSet数组的创建
    NSSet *set1 = [NSSet set];//空数组
    NSSet *set2 = [NSSet setWithObjects:@"chenfanfang1",@"chenfanfang2", nil];

    //因为NSSet是无序的,因此不存在下标这回事
    NSString *str = [set2 anyObject];//anyObject:任意的对象

NSSet和NSArray的对比

共同点:

  • 都是集合,都能存放多个oc对象
  • 只能存放oc对象,不能存放非oc对象类型(基本数据类型:int,char,float等、结构体,枚举)
  • 本身是都不可变的,都有一个可变的子类

不同点:

  • NSArray有顺序,NSSet没有顺序

字典:NSDictionary和NSMutableDictionary

字典的概念:

字典: key —–> value 即: 索引 —-> 文字内容
字典里存放的东西都是键值对

NSDictionary:不可变字典

字典的创建:

    NSDictionary *dict = [NSDictionary dictionaryWithObject:@"chenfanfang" forKey:@"name"];

取出NSDictionary 里的元素

    id obj = [dict objectForKey:@"name"];
    NSLog(@"%@",obj);

输出结果:
2015-03-14 13:47:30.904 集合类[2653:27158] chenfanfang

用NSDictionary创建多元素的数组

    NSArray *keys = @[@"name",@"address"];
    NSArray *objects = @[@"chenfanfang",@"福建"];
    NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];

    //取出字典中的元素,并且输出
    id obj1 = [dict objectForKey:@"name"];
    NSLog(@"name:%@",obj1);

    id obj2 = [dict objectForKey:@"address"];
    NSLog(@"address:%@",obj2);

    //这种做法,类是于类

输出结果:
2015-03-14 13:55:55.151 集合类[2938:30517] name:chenfanfang
2015-03-14 13:55:55.152 集合类[2938:30517] address:福建

NSDictionary另一种创建方式

    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
                          @"chenfanfang",@"name",
                          @"福建",@"address",
                          @"23",@"age", nil];
    //取出元素并且输出
    NSLog(@"name:%@",[dict objectForKey:@"name"]);
    NSLog(@"address:%@",[dict objectForKey:@"address"]);
    NSLog(@"age:%@",[dict objectForKey:@"age"]);

输出结果;
2015-03-14 14:03:35.031 集合类[3178:33403] name:chenfanfang
2015-03-14 14:03:35.032 集合类[3178:33403] address:福建
2015-03-14 14:03:35.033 集合类[3178:33403] age:23

根据xcode特性,简洁地创建NSDictionary对象

    NSDictionary *dict = @{
                           @"name":@"chenfanfang",
                           @"address":@"福建",
                           @"age":@"23"
                           };
        //取出元素并且输出
    NSLog(@"name:%@",[dict objectForKey:@"name"]);
    NSLog(@"address:%@",[dict objectForKey:@"address"]);
    NSLog(@"age:%@",[dict objectForKey:@"age"]);

输出结果:
2015-03-14 14:07:17.659 集合类[3299:35014] name:chenfanfang
2015-03-14 14:07:17.660 集合类[3299:35014] address:福建
2015-03-14 14:07:17.660 集合类[3299:35014] age:23

返回键值对数:[dict count] 对应的点语法为:dict.count

    NSDictionary *dict = @{
                           @"name":@"chenfanfang",
                           @"address":@"福建",
                           @"age":@"23"
                           };
        //取出元素并且输出
    int count1 = [dict count];
    //以上对应的点语法为 dict.count
    int count2 = dict.count;
    NSLog(@"count1 = %d",count1);
    NSLog(@"count2 = %d",count2);

输出结果:
2015-03-14 14:10:58.011 集合类[3416:36446] count1 = 3
2015-03-14 14:10:58.012 集合类[3416:36446] count2 = 3

NSMutableDictionary:可变字典

可变字典的创建、添加键值对、删除键值对

    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
    //添加键值对
    NSLog(@"----------添加键值对-------------");
    [dict setObject:@"chenfanfang" forKey:@"name"];
    [dict setObject:@"福建" forKey:@"address"];

    NSLog(@"键值对的个数是:%d",dict.count);

    NSLog(@"address:%@",[dict objectForKey:@"address"]);
    NSLog(@"----------覆盖键值对-------------");

    //若在添加键值对的时候,若原本存在那个键,则会覆盖掉那个键值对
    [dict setObject:@"三明" forKey:@"address"];
    NSLog(@"键值对的个数是:%d",dict.count);
    NSLog(@"address:%@",[dict objectForKey:@"address"]);

    NSLog(@"----------删除键值对-------------");
    [dict removeObjectForKey:@"address"];
    NSLog(@"键值对的个数是:%d",dict.count);

输出结果:
2015-03-14 14:29:29.262 集合类[4017:42978] ———-添加键值对————-
2015-03-14 14:29:29.264 集合类[4017:42978] 键值对的个数是:2
2015-03-14 14:29:29.264 集合类[4017:42978] address:福建
2015-03-14 14:29:29.264 集合类[4017:42978] ———-覆盖键值对————-
2015-03-14 14:29:29.264 集合类[4017:42978] 键值对的个数是:2
2015-03-14 14:29:29.264 集合类[4017:42978] address:三明
2015-03-14 14:29:29.264 集合类[4017:42978] ———-删除键值对————-
2015-03-14 14:29:29.265 集合类[4017:42978] 键值对的个数是:1

字典的注意事项

  • @{@”name “:@”chenfanfang”}字典的创建方式返回的是不可变的字典:NSDictionary,不能用于可变字典:NSMutableDictionary。所以以下的写法是错误的:NSMutableDictionary *dict = @{@”name”:@”chenfanfang”};
  • 字典不允许有相同的Key,但允许有相同的value
  • 字典是无序的

字典的遍历

  • 方法1:用常规的for循环(不推荐)

    NSArray *keys = [dict allKeys];
    for (int i = 0; i < keys.count; i++) {
        NSString *key = keys[i];
        NSString *object = dict[key];
    }
  • 方法2:用block来遍历字典 (推荐)
    [dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
        NSLog(@"%@ -- %@",key,obj);
    }];

输出结果:
2015-03-14 14:41:52.894 集合类[4412:48356] name – chenfanfang
2015-03-14 14:41:52.894 集合类[4412:48356] address – 三明

NSArray 和 NSDictionary的混合使用:NSArray中存放字典元素

    NSArray *persons = @[
                         @{@"name":@"chenfanfang",@"address":@"福建"},
                         @{@"name":@"CFF",@"address":@"三明"}
                         ];

    //根据persons的下标取出字典对象
    NSDictionary *CFF = persons[1];
    NSLog(@"%@",CFF[@"name"]);

输出结果:
2015-03-14 14:52:07.473 集合类[4726:52124] CFF

集合类总结:

NSArray — NSMutableArray

  • 有序
  • @[obj1,obj2,obj3]只用于NSArray,不可用于NSMutableArray
  • 快速访问元素: 数组名[i];

NSSet — NSMutableSet

  • 无序

NSDictionary —NSMutableDictionary

  • 无序
  • @{key1:value1,key2:value2} 用于 NSDictionary而不能用于NSMutableDictionary
  • 快速访问元素: 字典名[i]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值