NSDictionary的用法

字典有一对key-value组成,二者必须成对出现

打印结果是{}是字典,()是数组,{()}是集合

如果键值没有成对出现,会崩溃

reason: '-[__NSPlaceholderDictionary initWithObjectsAndKeys:]: second object of each pair must be non-nil.  Or, did you forget to nil-terminate your parameter list?'

1.不可变字典 

创建一个字典对象

  NSDictionary *dic = [[NSDictionary alloc] initWithObjectsAndKeys:@"zhangsan", @"name", @"男", @"sex", @"玩", @"hobby", nil];
//    NSLog(@"%@", dic);
    // 打印一个字典有中括号,数组用小括号代表,而且字典是一个无序的容器
    
    // 便利构造器创建一个字典的对象
    // 都是先写value,再写key,防止少写
//    NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"何岸", @"name", @"25", @"age", @"胖", @"hobby", nil];
    // 字面量
    // 冒号前面的是key,冒号后面的是Value
//    NSDictionary *dic1 = @{@"1":@"2", @"3":@"4", @"5":@"6"};
//    NSLog(@"%@", dic1);
</pre><pre name="code" class="objc">//    // count是键值对数
//    NSLog(@"%ld", dic1.count);


根据key值进行取值:[objectForKey]
 // 根据对应的key进行取值
//    NSLog(@"%@", [dic1 objectForKey:@"1"]);
//    // allKeys是一个属性,返回值类型是NSArray,获取字典所有的key值
//    NSLog(@"%@", dic1.allKeys);
//    // allValue获取字典所有的value
//    NSLog(@"%@", dic1.allValues);


遍历字典:字典因为没有下标,所以不能直接对字典进行遍历,用forin遍历的时候,str对应的时key值,如果找到值,还需要根据key值找到value值
 for(NSInteger i = 0; i < dic1.count; i++){
//        NSLog(@"%@ = %@", dic1.allKeys[i], [dic1 objectForKey:dic1.allKeys[i]]);
//    }
//    
//    for (NSString *str in dic1.allKeys) {
//        NSLog(@"%@ = %@", str, [dic1 objectForKey:str]);
//    }

不可变字典

创建一个空字典

 // NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
    // 便利构造器
//    NSMutableDictionary *dic = [NSMutableDictionary dictionary];

添加一个键值对:setObject

如果字典里没有对应操作的key,这个方法就是添加键值对的作用,如果有就是修改键值对的功能

//    [dic setObject:@"何岸" forKey:@"name"];
//    NSLog(@"%@", dic);
    // 想修改name的值
//    [dic setObject:@"app" forKey:@"name"];
//    NSLog(@"%@", dic);
字典中只能有一个key值

删除

  // 把key和value成对的删除
//    [dic removeObjectForKey:@"name"];
//    NSLog(@"%@", dic);

字典和数组的互相嵌套
 NSDictionary *dic1 = @{@"name":@"zhangsan", @"age":@"10"};
//    NSDictionary *dic2 = @{@"name":@"lisi", @"age":@"13"};
//    NSDictionary *dic = @{@"dic1":dic1, @"dic2":dic2};
    
//    // 遍历
//    for (NSString *str in dic) {
//      // 找value
//        NSDictionary *temp = [dic objectForKey:str];
//        for (NSString *str in temp) {
//            NSLog(@"%@", [temp objectForKey:str]);
//        }
//    
//    }

 // 数组套字典
//    NSArray *arr = @[dic1, dic2];
//    for (NSDictionary *dic in arr) {
//        for (NSString *str in dic) {
//            NSLog(@"%@", [dic objectForKey:str]);
//        }
//    }

 // 字典套数组
//    NSArray *arr1 = @[@"松江", @"卢俊义", @"吴用", @"公孙胜"];
//    NSArray *arr2 = @[@"关胜", @"林冲", @"秦明", @"呼延灼"];
//    NSArray *arr3 = @[@"花荣", @"柴进", @"李英", @"朱仝"];
//    NSDictionary *dic = @{@"arr1":arr1, @"arr2":arr2, @"arr3":arr3};
//    for (NSString *str in dic) {
//        NSArray *temp = [dic objectForKey:str];
//        for (NSString *str in temp) {
//            NSLog(@"%@", str);
//        }
//    }

// 三层嵌套
//    NSArray *arr1 = @[@"松江", @"卢俊义", @"吴用", @"公孙胜"];
//    NSArray *arr2 = @[@"关胜", @"林冲", @"秦明", @"呼延灼"];
//    NSArray *arr3 = @[@"花荣", @"柴进", @"李英", @"朱仝"];
//    NSArray *arr4 = @[@"徐晃", @"张辽", @"许褚", @"典韦"];
//    NSArray *arr5 = @[@"马腾", @"马超", @"马岱", @"马铁"];
//
//    NSDictionary *dic1 = @{@"arr1":arr1, @"arr2":arr2};
//    NSDictionary *dic2 = @{@"arr3":arr3, @"arr4":arr4};
//    NSDictionary *dic3 = @{@"arr5":arr5};
//    NSArray *arr = @[dic1, dic2];
//    for (NSDictionary *dic in arr) {
//        for (NSString *str in dic) {
//            NSArray *temp = [dic objectForKey:str];
//            for (NSString *str in temp) {
//                NSLog(@"%@", str);
//            }
//        }
//    }
    

//    NSArray *arr1 = @[@"松江", @"卢俊义", @"吴用", @"公孙胜"];
//    NSArray *arr2 = @[@"关胜", @"林冲", @"秦明", @"呼延灼"];
//    NSArray *arr3 = @[@"花荣", @"柴进", @"李英", @"朱仝"];
//    NSArray *arr4 = @[@"徐晃", @"张辽", @"许褚", @"典韦"];
//    NSArray *arr5 = @[@"马腾", @"马超", @"马岱", @"马铁"];
//    NSArray *bigArr1 = @[arr1, arr2];
//    NSArray *bigArr2 = @[arr3, arr4, arr5];
//    NSDictionary *dic = @{@"big1":bigArr1, @"big2":bigArr2};
//    for (NSString *str in dic) {
//        NSArray *arr = [dic objectForKey:str];
//        for (NSArray *tempArr in arr) {
//            for (NSString *strArr in tempArr) {
//                NSLog(@"%@", strArr);
//            }
//        }
//    }

集合

不可变集合

集合的创建和数组差不多,用便利构造器创建一个集合对象,集合里的元素不可以重复,如果重复,那么重复的部分将被删除

这是最重要的应用:利用集合的没有重复元素的特点,会把数组变成集合,去掉重复的部分再转换回来

 // 将数组中重复的元素去除
//    NSArray *arr = @[@"8", @"1", @"2", @"3", @"1", @"3"];
//    NSSet *set = [NSSet setWithArray:arr];
//    NSLog(@"%@", set);
//    // allObject属性是将集合转换成数组的作用
//    NSArray *newArr = set.allObjects;
//    NSLog(@"%@", newArr);
 NSLog(@"%ld", set2.count);
//    // 返回一个元素,但是不保证是一个随机的数
//    NSLog(@"%@", [set anyObject]);
//    // 判断集合里有没有元素
//    BOOL result = [set containsObject:@"d"];
//    NSLog(@"%d",result);

遍历

// for进行遍历
//    for (NSString *str in set) {
//        NSLog(@"%@", str);
//    }
//    
//    for(NSInteger i = 0; i < set.count; i++){
//        NSLog(@"%@", set.allObjects[i]);
//    }



























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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值