NSDictionary的用法

来源:互联网 发布:数据库是什么软件 编辑:程序博客网 时间:2024/05/06 03:10

字典有一对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]);//    }



























0 0