NSDictionary

  1 //
  2 //  main.m
  3 //  NSDictionary
  4 //
  5 //  Created by dingxiaowei on 13-5-15.
  6 //  Copyright (c) 2013年 dingxiaowei. All rights reserved.
  7 //
  8
  9 #import <Foundation/Foundation.h>
 10 #import "Student.h"
 11 #pragma mark - 字典的创建
 12 void dicCreate(){
 13     //NSDictionary一旦创建是不可变的  可变的是NSMutableDictionary
 14     //创建一个键值对
 15     NSDictionary  *dic=[NSDictionary dictionaryWithObject:@"dingxiaowei" forKey:@"10141303"]; //只能放OC对象,不能放基本数据类型  注意:不能处理中文
 16     //创建多个键值对(最常用的初始化方法)
 17     dic=[NSDictionary dictionaryWithObjectsAndKeys:@"cl",@"10141301",
 18                                                    @"cey",@"10141302",
 19                                                    @"dxw",@"10141303", nil];
 20     //其他创建方法
 21     NSArray *objs=[NSArray arrayWithObjects:@"v1",@"v2",@"v3", nil];
 22     NSArray *keys=[NSArray arrayWithObjects:@"k1",@"k2",@"k3", nil];
 23     dic=[NSDictionary dictionaryWithObjects:objs forKeys:keys];
 24     NSLog(@"字典是:%@",dic);
 25 }
 26 #pragma mark - 字典的用法
 27 void dicUse(){
 28     //创建多个键值对(最常用的初始化方法)
 29     NSDictionary *dic=[NSDictionary dictionaryWithObjectsAndKeys:
 30                        @"v1",@"k1",
 31                        @"cey",@"10141302",
 32                        @"dxw",@"10141303", nil];
 33     NSLog(@"count:%zi",[dic count]);
 34     //由于NSDictionary是不可变的,所以一旦创建只能查询,不能更改
 35     id obj=[dic objectForKey:@"k1"];
 36     NSLog(@"k1-%@",obj);
 37
 38     //将字典写入文件中
 39     NSString *path=@"/Users/dingxiaowei/Desktop/dictionary.xml";
 40     if([dic writeToFile:path atomically:YES]){
 41         NSLog(@"字典写入到文件成功");
 42     }
 43     //读取xml的字典文件
 44     dic=[NSDictionary dictionaryWithContentsOfFile:path];
 45     NSLog(@"文件读取成功\ndic:%@",dic);
 46
 47     //返回所有的keys和values
 48     NSArray *keys=[dic allKeys];
 49     NSArray *values=[dic allValues];
 50     NSLog(@"所有的keys是:%@\n所有的值是:%@",keys,values);
 51
 52     //查询一个value对于的多个key
 53     dic=[NSDictionary dictionaryWithObjectsAndKeys:@"v1",@"k1",@"v2",@"k2",@"v1",@"k3",nil];
 54     keys=[dic allKeysForObject:@"v1"];
 55     NSLog(@"keys:%@",keys);
 56
 57     //根据多个key取出对于的value
 58     //注意:当key找不到对于的value时候,就用marker来代替
 59     NSArray *array1=[NSArray array];
 60     array1=[dic objectsForKeys:[NSArray arrayWithObjects:@"k1",@"k2", @"k4",nil] notFoundMarker:@"not-found"];//如果找不到对于的object 就用marker代替 比如这儿没有k4
 61     NSLog(@"找到的值%@",array1);
 62 }
 63 #pragma mark - 遍历字典
 64 void dicFor(){
 65     //初始化字典
 66     NSDictionary *dic=[NSDictionary dictionaryWithObjectsAndKeys:@"v1",@"k1",@"v2",@"k2",@"v3",@"k3", nil];
 67     //遍历字典所有的key
 68     for (id key in dic) {
 69         id value=[dic objectForKey:key];
 70         NSLog(@"普通遍历:%@-%@",key,value);
 71     }
 72
 73     //key迭代器遍历
 74     NSEnumerator *enumer=[dic keyEnumerator];
 75     id key=nil;
 76     while (key=[enumer nextObject]) {
 77         id value=[dic objectForKey:key];
 78         NSLog(@"key迭代器遍历:%@-%@",key,value);
 79     }
 80
 81     //value迭代器
 82     //对象迭代器
 83     //[dic objectEnumerator];
 84
 85     //lblock遍历(每调遍历一次键值就调用一次block
 86     [dic enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
 87         NSLog(@"block迭代器遍历:%@-%@",key,obj);
 88     }];
 89 }
 90 #pragma mark - 字典的内存管理
 91 void dicMemory(){
 92     Student *stu1=[Student studentWithName:@"cl"];
 93     Student *stu2=[Student studentWithName:@"cey"];
 94     Student *stu3=[Student studentWithName:@"dxw"];
 95     //字典会自动销毁,一般静态创建的对象都不需要我们自己释放,自动释放的时候会对key和value对象进行一次release操作
 96     NSDictionary *dic=[NSDictionary dictionaryWithObjectsAndKeys:stu1,@"k1",stu2,@"k2",stu3,@"k3",nil]; //注意:把一个对象塞给字典时会进行一次retain时候
 97     /*[stu1 retain];
 98     [stu2 retain];
 99     [stu3 retain];*/
100
101
102     NSLog(@"dic%@",dic);
103 }
104
105 int main(int argc, const char * argv[])
106 {
107
108     @autoreleasepool {
109
110         //dicCreate();
111         //dicUse();
112         //dicFor();
113         dicMemory();
114     }
115     return 0;
116 }

Student.h

1 #import <Foundation/Foundation.h>
2
3 @interface Student : NSObject
4 @property(nonatomic,retain)NSString *name;
5 +(id)studentWithName:(NSString *)name;
6 @end

Student.m

 1 #import "Student.h"
 2
 3 @implementation Student
 4
 5
 6 +(id)studentWithName:(NSString *)name{
 7     Student *stu=[[[Student alloc] init] autorelease];
 8     stu.name=name;
 9     return stu;
10 }
11
12 -(NSString *)description{
13     return _name;
14 }
15
16 -(void)dealloc{
17     NSLog(@"名字为%@被销毁了",_name);
18     [_name release];
19     [super dealloc];
20 }
21
22 @end

时间: 2024-11-10 08:00:50

NSDictionary的相关文章

[iphone] NSDictionary / NSMutableDictionary 及 NSArray / NSmutableArray (实例)

NSDictionary 和 NSArray一样是不可变的对象.用来实现字典集合,在给定关键字(通常是一个NSString字符串)下存储一个数值(可以是任何类型的对象).  NSDictionary使用类方法 dictionaryWithObjectAndKeys: 来创建字典:使用方法objectForKey: 来获取字典中的值.  Java代码   NSDictionary *dict = [NSDictionary dictionaryWithObjectAndKeys:@"just&qu

ios-升序排列NSDictionary

问题描述 升序排列NSDictionary 要升序排列一个NSDictionary,使用如下代码: NSDictionary *valDict = self.mGetDataDict[key][rowKey]; for (NSString *valueKey in [[valDict allKeys] sortedArrayUsingSelector:@selector(compare:)]) { if ([valueKey isEqualToString:@"attr"]) { di

Objective-C中关于NSArray, NSDictionary, NSNumber等写法的进化

从xcode4.4开始,LLVM4.0编译器为Objective-C添加一些新的特性.创建数组NSArray,哈希表NSDictionary, 数值 对象NSNumber时,可以像NSString的初始化一样简单方便.妈妈再也不担心程序写得手发酸了. 有兴趣的朋友可以关注LLVM编译器的相关文档:http://clang.llvm.org/docs/ObjectiveCLiterals.html 关于NSDictionary和NSNumber的例子来自:http://cocoaheads.tum

ios中NSArray,NSSet,NSDictionary总结

三种集合类来收集cocoa对象(NSObject对象): NSArray 用于对象有序集合(相当于是数组) NSSet 用于对象无序集合 NSDictionary用于键值映射 以上三种集合类是不可变的(一旦初始化后,就不能改变) 以下是对应的三种可变集合类(这三种可变集合类是对应上面三种集合类的子类): NSMutableArray NSMutableSet NSMutableDictionary 注:这些集合类只能收集cocoa对象(NSOjbect对象),如果想保存一些原始的C数据(例如,i

[翻译] 用 ObjectiveSugar 扩展NSArray NSDictionary NSSet NSNumber

     source - https://github.com/supermarin/ObjectiveSugar Look like a girl, act like a lady, think like a man, work like a boss. 外表如萝莉,举止赛淑女,思想堪汉子,工作比老板.      A set of functional additions for Foundation you wish you've had at the first place.      

OC之之NSDictionary/NSMutableDictionary

NSDictionary/NSMutableDictionary特点: (1)里存储的东西都是键值对 (2)可以像数组一样快速创建(适用NSDictionary):@{key1 : value1,  key2 : value2} (3)快速访问元素:字典名 [key] 比如可以这样为指定key赋值: dic [@"key1"] = @"value1"; 快速获取key所对应的value: NSString *name = dic[@"name"]

NSDictionary字典

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 //Foundation中的字典NSDictionary是由键-值对组成的数据集合.key(键)的值必须是唯一

图片-Swift+NsData转化为NsDictionary

问题描述 Swift+NsData转化为NsDictionary 如题.我要Swift语言写的!不要object-c!求大神!为什么我这么写返回的是nil!??!??!? 解决方案 http://stackoverflow.com/questions/5513075/how-can-i-convert-nsdictionary-to-nsdata-and-vice-versa

[转] NSMapTable 不只是一个能放weak指针的 NSDictionary

NSMapTable 不只是一个能放weak指针的 NSDictionary NSMapTable是早在Mac OS X 10.5(Leopard)的引入集合类.乍一看,这似乎是作为一个替换NSDictionary的存在,可以选择"strong"和"week"指针. 在这篇文章中,我会告诉你除了为什么它也非常有用之外的还有垃圾回收机制以及它是如何做NSDictionary中不能(或不应该)做的事情. 转至  http://www.isaced.com/post-23

iOS:把对象直接转化成NSDictionary或JSON

iOS:把对象直接转化成NSDictionary或JSON Mgen|2013-09-18 10:48|15515次浏览|IOS(296)开发(190)应用(36)对象(1)Dictionary(1)0 1. 使用 实现的结果就是可以把任何对象转化成字典或者字典对应的JSON.字典的数据就是来自对象的属性名称和属性值 .而且是多层的,也就是说如果对象的某个属性值是另一个对象,数组,或者字典,该值都会被转换成另一个字典. 这个类型名称是PrintObject,它的所有方法都是静态的: 1 2 3