Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 276|回复: 0

[默认分类] NSDictionary(字典)类使用

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-5-27 17:58:17 | 显示全部楼层 |阅读模式


    NSDictionary:字典就是关键字及其定义(描述)的集合。Cocoa中的实现字典的集合NSDictionary在给定的关键字(通常是一个NSString)下存储一个数值(可以是任何类型的对象)。然后你就可以用这个关键字来查找相应的数值。


    不同于数组,字典(也被称为散列表或关联数组)使用的是键查询的优化存储方式。它可以立即找出要查询的数据,而不需要遍历整个数组进行查找。


    可使用dictionaryWithObjectsAndKeys来创建字典


    查询字典的值:objectForKey


    NSMutableDictionary的dictionary方法可以创建一个可变字典,也可以使用dictionaryWithCapaticy:。


    使用 setObject:forkey: 方法添加字典元素,如果关键字已存在,则用新植替换旧值。


    类似的,NSMutableDictionary类允许随意添加或删除字典元素。


    添加元素:setObject:forkey:
    删除元素:removeObjectForKey:


      
    1. 1 //
    2. 2  //
    3. 3  //
    4. 4  //
    5. 5  //
    6. 6 //  
    7. 7 //
    8. 8
    9. 9 #import <Cocoa/Cocoa.h>
    10. 10
    11. 11
    12. 12 @interface MyClass : NSObject
    13. 13 {
    14. 14     NSString *firstName;
    15. 15     NSString *lastName;
    16. 16 }
    17. 17
    18. 18
    19. 19 - (void) setFirstName:(NSString *)m_firstName;
    20. 20 - (NSString *) firstName;
    21. 21
    22. 22 - (void) setLastName: (NSString *) m_lastName;
    23. 23 - (NSString *) lastName;
    24. 24
    25. 25
    26. 26 @end
    复制代码






      
    1. 9 #import "MyClass.h"
    2. 10
    3. 11
    4. 12 @implementation MyClass
    5. 13
    6. 14 - (void) setFirstName:(NSString *)m_firstName{
    7. 15   
    8. 16     firstName = m_firstName;
    9. 17 }
    10. 18 - (NSString *) firstName{
    11. 19  return firstName;
    12. 20 }
    13. 21
    14. 22 - (void) setLastName: (NSString *) m_lastName{
    15. 23     lastName = m_lastName;
    16. 24 }
    17. 25 - (NSString *) lastName{
    18. 26  return lastName;
    19. 27 }
    20. 28
    21. 29
    22. 30 - (NSString *) description
    23. 31 {   
    24. 32  if (firstName == nil || lastName == nil) {
    25. 33  return @"No Name found.";
    26. 34     } else {
    27. 35  return [NSString stringWithFormat:@"%@ %@",
    28. 36             firstName,lastName];
    29. 37     }
    30. 38   
    31. 39 }
    32. 40
    33. 41 @end
    复制代码




      


      
    1. 7 #import <Foundation/Foundation.h>
    2. 8 #import "MyClass.h"
    3. 9
    4. 10 int main (int argc, const char * argv[]) {
    5. 11     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    6. 12   
    7. 13  // 创建字典:dictionaryWithObjectsAndKeys:
    8. 14     MyClass *my1 = [MyClass new];
    9. 15     MyClass *my2 = [MyClass new];
    10. 16     MyClass *my3 = [MyClass new];
    11. 17     MyClass *my4 = [MyClass new];
    12. 18   
    13. 19     NSDictionary *myClassDict;
    14. 20     myClassDict = [NSDictionary dictionaryWithObjectsAndKeys:
    15. 21               my1, @"my1",
    16. 22               my2, @"my2",
    17. 23               my3, @"my3",
    18. 24               my4, @"my4", nil];
    19. 25  // 获取值 objectForKey
    20. 26     MyClass *sub = [myClassDict objectForKey: @"my3"];
    21. 27  if (sub == nil) {
    22. 28         exit(1);
    23. 29     }
    24. 30     [sub setFirstName:@"Elf"];
    25. 31     [sub setLastName:@"Sundae"];
    26. 32   
    27. 33     NSLog(@"修改数据: %@",sub);
    28. 34   
    29. 35  // 遍历字典
    30. 36     NSLog(@"***遍历字典myClassDict如下:");
    31. 37  for (id key in myClassDict)
    32. 38     {
    33. 39         NSLog(@"key: %@ ,value: %@",key,[myClassDict objectForKey:key]);
    34. 40     }
    35. 41     NSLog(@"***遍历字典myClassDict结束。");
    36. 42   
    37. 43  // MARK: ***  添加新元素  ***   
    38. 44  // NSDictionary无法添加或删除元素,可以使用NSMutableDictionary.
    39. 45     NSMutableDictionary *myNewDict = [NSMutableDictionary dictionary];
    40. 46  // 将原有字典添加到新字典的一对元素
    41. 47  //[myNewDict setObject:myClassDic forKey:@"旧的不可变字典myClassDic"];
    42. 48   
    43. 49  // 遍历添加已有数据(原字典)
    44. 50  for (id key in myClassDict)
    45. 51     {
    46. 52         [myNewDict setObject: [myClassDict objectForKey:key]
    47. 53                   forKey:key];
    48. 54     }
    49. 55   
    50. 56     NSString *newkey = @"newKey";
    51. 57     NSString *newValue = @"This is a new Value.";
    52. 58     [myNewDict setObject:newValue forKey:newkey];
    53. 59   
    54. 60  // 遍历myNewDict
    55. 61     NSLog(@"***遍历字典myNewDict如下:");
    56. 62  for (id key in myNewDict)
    57. 63     {
    58. 64         NSLog(@"key: %@ ,value: %@",key,[myNewDict objectForKey:key]);
    59. 65     }
    60. 66     NSLog(@"***遍历字典myNewDict结束。");
    61. 67   
    62. 68  // 删除元素
    63. 69     [myNewDict removeObjectForKey: @"newKey"];
    64. 70   
    65. 71  // 遍历myNewDict
    66. 72     NSLog(@"***遍历字典myNewDict如下:");
    67. 73  for (id key in myNewDict)
    68. 74     {
    69. 75         NSLog(@"key: %@ ,value: %@",key,[myNewDict objectForKey:key]);
    70. 76     }
    71. 77     NSLog(@"***遍历字典myNewDict结束。");
    72. 78   
    73. 79     [pool drain];
    74. 80  return 0;
    75. 81 }
    复制代码




      


    DEMO下载



    // 输出结果(省略日期 时间等信息)
    修改数据: Elf Sundae
    ***遍历字典myClassDict如下:
    key: my3 ,value: Elf Sundae
    key: my4 ,value: No Name found.
    key: my1 ,value: No Name found.
    key: my2 ,value: No Name found.
    ***遍历字典myClassDict结束。
    ***遍历字典myNewDict如下:
    key: newKey ,value: This is a new Value.
    key: my3 ,value: Elf Sundae
    key: my4 ,value: No Name found.
    key: my1 ,value: No Name found.
    key: my2 ,value: No Name found.
    ***遍历字典myNewDict结束。
    ***遍历字典myNewDict如下:
    key: my3 ,value: Elf Sundae
    key: my4 ,value: No Name found.
    key: my1 ,value: No Name found.
    key: my2 ,value: No Name found.
    ***遍历字典myNewDict结束。



    将一个BOOL值插入到NSMutableDictionary中

      

       项目要讲BOOL类型的值插入到一个NSMutableDictionary。
       

       首先将 BOOL 包装到 NSNumber中:
       NSNumber *boolNumber = [NSNumber numberWithBool:YES]
       取得BOOL值:
       BOOL b = [boolNumber boolValue];
       

       或者通过这种方式:
       NSValue *boolValue = [NSValue value:pointerToBool withObjCType:@encode(BOOL*)];
       BOOL *b = [boolValue pointerValue];



      
      
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-14 11:12 , Processed in 0.410340 second(s), 37 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表