NSDictionary类使用

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 }  

// 输出结果(省略日期 时间等信息)
修改数据: 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中

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

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

  6. 或者通过这种方式:
  7. NSValue *boolValue = [NSValue value:pointerToBool withObjCType:@encode(BOOL*)];
  8. BOOL *b = [boolValue pointerValue];
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值