• Foundation框架(NSDictionary、NSMutableDictionary)


    OC字典(NSDictionary、NSMutableDictionary)

    一、NSDictionary

    概述:NSDictionary也称作字典,作用类似:通过一个key,就能找到对应的value,NSDictionary是不可变的, 一旦初始化完毕, 里面的内容就无法修改,字典存储的时候,必须是"键值对"的方式来存储(同时键不要重复),键值对中存储的数据是"无序的",键值对集合可以根据键, 快速获取数据。

    1、NSDictionary的创建

    1 NSDictionary *dict = [NSDictionary dictionary];  //创建一个空的不可变的字典
    2 NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@“name"]; //创建一个含有键值对的字典
    3 NSDictionary *dict = [NSDictionary dictionaryWithObjects:@[@"jack", @"北京"]  forKeys: @[@"name", @“address"]];  //创建含有多个键值对的字典
    4 NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
    5 @"jack", @"name",
    6 @"北京", @"address",
    7 @"32423434", @"qq", nil];   //通过这种方式创建字典,不经常使用
    8 NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"};  //快速创建一个字典

    2、NSDdictionary的访问方式

    1 NSDictionary *dict = [NSDictionary dictionaryWithObjects:@[@"jack", @"北京"]  forKeys: @[@"name", @“address"]];
    2 id obj = [dict objectForKey:@“name"];
    3 id obj = dict[@“name"];      //这两种方式都可以
    4 NSLog(@"%ld", dict.count); // 返回的是键值对的个数,在字典 key 称之为为键,value称之为值 输出结果为 2

    3、字典的遍历

     1 NSDictionary *dict = @{@"name":@"lnj",@"age":@"30",@"height":@"1.68"};
     2 //第一种方式 常规遍历
     3 for (int i = 0; i < dict.count  ; i++) {
     4 // 把字典中所有key 保存到一个数组中
     5 NSArray *keys = [dict allKeys];
     6 NSLog(@"%@",keys[i]);
     7 //取出当前位置对应的key
     8 NSString *key = keys[i];
     9 //取出当前位置key 所对应的值
    10 NSString *value = dict[key];
    11 NSLog(@"key = %@,value = %@",key,value);
    12 }
    13 
    14 //第二种方式 增强for循环
    15 /*
    16 for(NSString *obj in dict)
    17 {
    18 NSString *value = dict[obj];
    19 NSLog(@"key = %@,value = %@",obj,value);
    20 }
    21 */
    22 
    23 //第三种方式 迭代器 遍历
    24 /*
    25 [dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
    26 NSLog(@"key = %@,value = [%@]",key,obj);
    27 }];
    28 */

    4、字典文件的读写

      1)字典写入文件

    1 NSDictionary *dict = @{@"name":@"lnj",@"age":@"34",@"height":@"1.68"};
    2 BOOL flag = [dict writeToFile:@"/Users/tangge/DeskTop/堂堂.plist" atomically:YES];
    3 NSLog(@"%d",flag);   //写入成功返回YES,失败返回NO
    4 //对比数组
    5 /*
    6 NSArray *arr = @[@34,@13,@23,@14];
    7 BOOL flag =  [arr writeToFile:@"/Users/tangge/DeskTop/tt.plist" atomically:YES];
    8 */

      2)从文件中读取字典

    1 NSDictionary *newDict = [NSDictionary dictionaryWithContentsOfFile:@"/Users/tangge/DeskTop/堂堂.plist"];
    2 NSLog(@"%@",newDict);

    二、NSMutableDictionary

    概述:NSMutableDictionary是NSDictionary的子类。NSDictionary是不可变的,一旦初始化完毕后,它里面的内容就永远是固定的,不能删除里面的元素, 也不能再往里面添加元素,NSMutableDictionary是可变的,随时可以往里面添加更改删除元素。

    1、可变字典的创建

    1 NSMutableDictionary *dict = [NSMutableDictionary dictionary];  //创建一个空的可变字典
    2 NSMutableDictionary *dict2 = [NSMutableDictionary dictionaryWithObject:@"10" forKey:@"age"]; //创建含有一个键值对的字典
    3 NSMutableDictionary *dict1 = [NSMutableDictionary dictionaryWithObjects:@[@"tg",@"td"] forKeys:@[@"name",@"name1"]]; //创建含有多个键值对的字典

    2、可变字典的基本使用

    1 NSMutableDictionary *dict = [NSMutableDictionary dictionary]; 
    2 [dict setObject:@"jack" forKey:@“name"];     // 添加键值对
    3 //字典访问方式
    4 NSString *str1 = [dictM objectForKey:@"name"];//第一种访问方式
    5 NSString *str = dict1[@"name"]; //第二种访问方式
    6 [dict removeObjectForKey:@"name"];// 移除单个键值对 
    7 [dictM removeObjectsForKeys:@[@"age",@"height"]]; //移除多个键值对
    8 [dictM setValuesForKeysWithDictionary:@{@"age":@"10",@"height":@"1.68"}];//将字典中所有的键值对取出来放入到dictM中

    3、NSMutableDictionary与NSDictionary注意点

    1 //如果是可变数组出现重复的key,那么后面的 值会覆盖前面的值
    2 NSMutableDictionary *dictM = [NSMutableDictionary dictionaryWithObjects:@[@"ttt",@"zzz"] forKeys:@[@"name",@"name"]];
    3 NSLog(@"%@",dictM);   //输出的结果:zzz
    4 //如果是不可变的数组出现重复的key,那么后面的值不会被保存
    5 NSDictionary *dict = @{@"name":@"lnj",@"name":@"lmj"};
    6 NSLog(@"%@",dict); //输出结果:name = lnj;
    7 
    8 NSMutableDictionary *dict = @{@"name" : @“jack"}; //快速创建的字典是不可变的,不能用可变的来接收,
    9 [dict setObject:@"rose" forKey:@“name"];  //动态检测就会报错
  • 相关阅读:
    双系统安装,引导被覆盖-如何解决?
    关于apue.3e中apue.h的使用
    UML类图关系
    设计模式的原则
    插入排序Insertion Sort
    Xcode intellisense meaning of letters in colored boxes like f,T,C,M,P,C,K,# etc
    asp.net mvc 页面内容呈现Html.Raw HtmlString
    sqlserver通过设计器修改表结构保存时提示:保存到文本问题
    在windows下使用Cygwin模拟unix环境,并安装apt-cyg,svn等工具
    vs2015插件推荐 Productivity Power Tools 2015
  • 原文地址:https://www.cnblogs.com/zhaoyutang/p/4628418.html
Copyright © 2020-2023  润新知