OC字典(NSDictionary)和集合(NSSet)的总结

1.不可变字典

// 字典里的元素是无序
1.1 创建不可变字典 (初始化方法,便利构造器)
    // 初始化方法(值在前,键在后)
    NSDictionary *dic1 = [[NSDictionary alloc] initWithObjectsAndKeys:@"1的value",@"1",@"2的value",@"2",nil];
    // 输出dic1
    NSLog(@"%@",dic1);
    // 便利构造器(值在前,键在后)
    NSDictionary *dic2 = [NSDictionary dictionaryWithObjectsAndKeys:@"3的value",@"3",@"4的value",@"4", nil];
    // 输出dic2
    NSLog(@"%@",dic2);
    // 字面量(键在前,值在后)(常用)
    NSDictionary *dic3 = @{@"5":@"5的value",@"6":@"6的value"};
    NSLog(@"%@",dic3);
1.2 不可变字典的几个属性(count,allkeys,allvalues)
    // count 字典里的键值对的个数
    NSInteger count = dic1.count;
    NSLog(@"%ld",count);
    // allKeys 字典里的所有key的值
    NSLog(@"%@",dic1.allKeys);
    // allValues 字典里所有的value的值
    NSLog(@"%@",dic1.allValues);
1.3 遍历不可变字典 (遍历的三种方式)
    // 第一种:for
    for(int i = 0; i < dic1.count; i++){
        NSLog(@"%@ : %@",dic1.allKeys[i],dic1.allValues[i]);
    }
    // 第二种:for in 借助allKeys
    for (NSString *key in dic1.allKeys) {
        NSLog(@"%@ : %@",key,[dic1 objectForKey:key]);
    }
    // 第三种:for in直接访问(常用)
    for (NSString *key in dic1) {
        NSLog(@"%@ : %@",key,dic1[key]);
    }

2.可变字典

2.1 创建可变字典 (两种方式)
    // 2.1 创建可变字典 (两种方式)
    // 初始化方法(值在前,键在后)
    NSMutableDictionary *dic4 = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"7的value",@"7",@"8的value",@"8", nil];
    // 输出
    NSLog(@"%@",dic4);
    // 便利构造器(值在前,键在后)
    NSMutableDictionary *dic5 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"9的value",@"9",@"10的value",@"10", nil];
    // 输出
    NSLog(@"%@",dic5);
2.2 可变字典的方法(添加,修改,删除)
    // 向可变字典中添加键值对
    [dic5 setObject:@"11的value" forKey:@"11"];
    // 输出
    NSLog(@"%@",dic5);
    // 修改可变字典中的值
    [dic5 setObject:@"修改后的10的value" forKey:@"10"];
    // 输出
    NSLog(@"%@",dic5);
    // setObject 当字典中有相对于的key的时候就把value修改,如果没有就添加一个新的键值对
    // 删除
    [dic5 removeObjectForKey:@"9"];
    // 输出
    NSLog(@"%@",dic5);
    // 清空字典
    [dic5 removeAllObjects];
    // 输出
    NSLog(@"%@",dic5);
2.3 遍历可变字典
         和不可变字典的遍历方式一样,请看1.3,在此就不过多赘述了

3.字典和数组的嵌套使用

    // 新建八个数组对象
    NSArray *arr1 = @[@"刘备",@"诸葛亮",@"赵子龙"];
    NSArray *arr2 = @[@"曹操",@"曹丕",@"曹植"];
    NSArray *arr3 = @[@"马腾",@"马超",@"马铁"];
    NSArray *arr4 = @[@"孙权",@"孙策",@"孙坚"];
// 3.1 两层嵌套
    // 新建一个字典,字典的元素是上面的数组
    NSDictionary *dic = @{@"arr1":arr1, @"arr2":arr2,@"arr3":arr3,@"arr4":arr4};
    // 遍历dic字典,输出字典里的数组里的元素
    for (NSString *tempKey1 in dic) {
        NSArray *tempArr1= dic[tempKey1];
        for (NSString *tempStr2 in tempArr1) {
            // 输出
            NSLog(@"%@",tempStr2);
        }
        // 输出分界线
        NSLog(@"\n");
    }

// 3.2 三层嵌套
    // 新建两个字典,字典的元素是上面定义的数组对象
    NSDictionary *dic1 = @{@"arr1":arr1,@"arr2":arr2};
    NSDictionary *dic2 = @{@"arr3":arr3,@"arr4":arr4};
    // 新建一个数组,数组元素是上面创建的字典对象
    NSArray *arr = @[dic1,dic2];
    
    // 遍历输出
    for (NSDictionary *tempDic1 in arr) {
        for (NSString *tempKey2 in tempDic1) {
            NSArray *tempArr2 = tempDic1[tempKey2];
            for (NSString *tempStr3 in tempArr2) {
                // 输出
                NSLog(@"%@",tempStr3);
            }
            // 输出分界线
            NSLog(@"\n");
        }
    }

4. 集合

4.1 创建集合
    // 初始化方法
    NSSet *set1 = [[NSSet alloc] initWithObjects:@"first",@"second",@"third", nil];
    NSLog(@"%@",set1);
    // 便利构造器
    NSSet *set2 = [NSSet setWithObjects:@"one",@"two",@"three", nil];
    NSLog(@"%@",set2);
4.2 遍历集合
    for (NSString *temp in set1) {
        NSLog(@"%@",temp);
    }
4.3 集合的使用(主要是和数组配合使用)
   集合的主要作用是和数组配合使用,去除掉数组中重复的元素
   正常情况下要去除一个数组中重复的元素,每一个元素都需要和其他元素比较一遍,使用集合和数组配合将会大大的提升效率
   解释:因为集合中的元素不允许重复,当数组中重复的元素添加到集合中的时候,集合会自动屏蔽掉不添加,当再把集合中的元素添加到数组中的时候,数组中的元素就没有重复的了,但是因为集合里的元素是无序的所以去重后的数组中的元素是无序的,需要重新排序.

    // 新建一个数组
    NSArray *arr = @[@"8",@"1",@"2",@"3",@"1",@"1",@"2",@"5"];
    // 新建一个集合将数组中的元素添加到集合中
    NSSet *set = [NSSet setWithArray:arr];
    // 新建一个新的数组,将集合中的元素添加到新数组中
    NSArray *newArr = [NSArray arrayWithArray:set.allObjects];
    // 输出新的数组
    NSLog(@"%@",newArr);
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值