通过唯一的key找到相应的value,类似于Map

NSDictionary是不可变的
 
1.创建
 void dicCreate()
{
//Immutable
// NSDictionary *dic = [NSDictionary dictionary]; NSDictionary *dic = [NSDictionary dictionaryWithObject:@"Simon" forKey:@"name"]; dic = [NSDictionary dictionaryWithObjectsAndKeys:@"v1", @"k1", @"v2", @"k2", nil]; NSArray *objs = [NSArray arrayWithObjects:@"v1", @"v2", @"v3", nil];
NSArray *keys = [NSArray arrayWithObjects:@"k1", @"k2", @"k3", nil];
dic = [NSDictionary dictionaryWithObjects:objs forKeys:keys]; NSLog(@"%@", dic); }
 
集中批量创建字典
         NSDictionary *d11_1 = @{@"姓名":@"张三", @"年龄":@"", @"性别":@"男"};
 
若存在同名的元素,采用最先定义的,多余的元素不会被计数
不允许nil作为键值
NSMutableDictioinary不能使用此方法,因为返回的是一个NSDictionary
 
 
2.基本操作
(1)键值对数量
(2)比较
(3)取值
(4)IO操作
 void dicUse()
{
NSArray *objs = [NSArray arrayWithObjects:@"v1", @"v2", @"v3", nil];
NSArray *keys = [NSArray arrayWithObjects:@"k1", @"k2", @"k3", nil];
NSDictionary *dic = [NSDictionary dictionaryWithObjects:objs forKeys:keys]; NSLog(@"%@", [dic objectForKey:@"k1"]);
} void dicUse2()
{
NSArray *objs = [NSArray arrayWithObjects:@"v1", @"v1", @"v2", nil];
NSArray *keys = [NSArray arrayWithObjects:@"k1", @"k2", @"k3", nil];
NSDictionary *dic = [NSDictionary dictionaryWithObjects:objs forKeys:keys]; NSArray *keys2 = [dic allKeys];
NSLog(@"%@", keys2); NSArray *keys3 = [dic allKeysForObject:@"v1"];
NSLog(@"%@", keys3); NSArray *objs2 = [dic objectsForKeys:[NSArray arrayWithObjects:@"k1",@"k2",@"k4",nil] notFoundMarker:@"not found"];
NSLog(@"%@", objs2);
}
 
3.遍历
 void dicLoop()
{
NSArray *objs = [NSArray arrayWithObjects:@"v1", @"v2", @"v3", nil];
NSArray *keys = [NSArray arrayWithObjects:@"k1", @"k2", @"k3", nil];
NSDictionary *dic = [NSDictionary dictionaryWithObjects:objs forKeys:keys]; //Loop all keys in dictionary
for (id key in dic)
{
id value = [dic objectForKey:key];
NSLog(@"%@ = %@", key, value);
}
}
 
4.迭代器
 void dicEnumerator()
{
NSArray *objs = [NSArray arrayWithObjects:@"v1", @"v2", @"v3", nil];
NSArray *keys = [NSArray arrayWithObjects:@"k1", @"k2", @"k3", nil];
NSDictionary *dic = [NSDictionary dictionaryWithObjects:objs forKeys:keys]; //key enumerator
NSEnumerator *enumerator = [dic keyEnumerator];
id key =nil;
while (key = [enumerator nextObject])
{
id value = [dic objectForKey:key];
NSLog(@"%@ = %@", key, value);
}
}
 
5.block迭代
 void dicBlockLoop()
{
NSArray *objs = [NSArray arrayWithObjects:@"v1", @"v2", @"v3", nil];
NSArray *keys = [NSArray arrayWithObjects:@"k1", @"k2", @"k3", nil];
NSDictionary *dic = [NSDictionary dictionaryWithObjects:objs forKeys:keys]; [dic enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
NSLog(@"%@ - %@", key, obj);
}];
}
 
6.内存管理
 void memoryManage()
{
Student *stu1 = [Student studentWithName:@"Simon"];
Student *stu2 = [Student studentWithName:@"Joke"];
Student *stu3 = [Student studentWithName:@"Man"];
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:stu1,@"stu1",
stu2, @"stu2",
stu3, @"stu3", nil]; //When dictionary is destroyed, the keys & objects will be released one time
NSLog(@"stu1 before dic release:%zi", stu1.retainCount);
}
 
7.取出键、值
(1)
         NSArray *da = [d allKeys];
(2)
         NSLog(@"%@", d[@""]);
 
8.NSDictionary是无序的,取出来的值不会按照存入的顺序排列
         NSMutableDictionary *d = [NSMutableDictionary dictionary];
for (int i=; i<; i++)
{
[d setObject:@"abc" forKey:[NSString stringWithFormat:@"%d", i]];
} NSLog(@"%@", d);
 
out:
2014-11-19 02:36:25.850 03-NSArray[5171:303] {
    0 = abc;
    1 = abc;
    10 = abc;
    11 = abc;
...
 
 
 

[OC Foundation框架 - 10] NSDictionary的更多相关文章

  1. OC Foundation框架—集合

    Foundation框架—集合 一.NSArray和NSMutableArray (一)NSArray不可变数组 (1)NSArray的基本介绍 NSArray是OC中使用的数组,是面向对象的,以面向 ...

  2. iOS - OC Foundation 框架

    前言 框架是由许多类.方法.函数和文档按照一定的逻辑组织起来的集合,以使研发程序更容易. Foundation 框架:为所有程序开发奠定基础的框架称为 Foundation 框架. Cocoa :是指 ...

  3. OC Foundation框架—结构体

    一.基本知识 Foundation—基础框架.框架中包含了很多开发中常用的数据类型,如结构体,枚举,类等,是其他ios框架的基础. 如果要想使用foundation框架中的数据类型,那么包含它的主头文 ...

  4. OC Foundation框架—字符串

    一.Foundation框架中一些常用的类 字符串型: NSString:不可变字符串 NSMutableString:可变字符串 集合型: 1) NSArray:OC不可变数组 NSMutableA ...

  5. OC中Foundation框架之NSDictionary、NSMutableDictionary

    NSDictionary概述 NSDictionary的作用类似:通过一个key ,就能找到对应的value 同样 NSDictionary是不可变的,一旦初始化完毕,里面的内容就无法修改 NSDic ...

  6. OC — (Foundation框架-NSDate)

    NSDate:是OC中处理日期时间的一个类,可以用来表示时间 获取当前的时间 NSDate *d = [NSDate date]; 创建日期时间对象 NSLog输出是当前时间 格林时间 格式化显示时间 ...

  7. Foundation框架--字典( NSDictionary NSMutableDictionary )

    基础知识 1.字典不允许相同的key,但允许有相同的value. 2,字典是无序的,字典不能排序. 3.字典里的内容是成对存在的,不会出现单数. 4.快速创建的方式只适合不可变字典. 不可变字典 #i ...

  8. [OC Foundation框架 - 23] 文件管理

    A. 目录管理 NSFileManager*manager = [NSFileManagerdefaultManager];//单例模式 // 1.获取文件属性 NSString *path = @& ...

  9. [OC Foundation框架 - 20] 统计代码行数

    注意: 1.变量名和函数名不要混淆调用 2.不要对文件夹进行文件的操作,没有权限 3.递归调用注意初始化变量   // // main.m // CodeLineCount // // Created ...

随机推荐

  1. Maven for Myeclipse的一个常见错误 Project configuration is not up-to-date with pom.xml

    使用Myeclipse开发Maven项目时,经常会发现一个错误提示: Description Resource Path Location Type Project configuration is ...

  2. SPRING IN ACTION 第4版笔记-第八章Advanced Spring MVC-005-Pizza例子的订单流程()

    一. 1.订单流程定义文件order-flow.xml <?xml version="1.0" encoding="UTF-8"?> <flo ...

  3. C++中的INL

    inl文件介绍 inl文件是内联函数的源文件.内联函数通常在C++头文件中实现,但是当C++头文件中内联函数过多的情况下,我们想使头文件看起来简洁点,能不能像普通函数那样将内联函数声明和函数定义放在头 ...

  4. POJ1035——Spell checker(字符串处理)

    Spell checker DescriptionYou, as a member of a development team for a new spell checking program, ar ...

  5. 比nerdtree更好的文件浏览器:vimfiler

    通过:VimFilerExplorer来打开一个文件浏览器 h:收起 t:展开 -:close 回车:进入或展开 空格:收起

  6. Extension Method[上篇]

    在C#3.0中,引入了一些列新的特性,比如: Implicitly typed local variable, Extension method,Lambda expression, Object i ...

  7. python项目

    python实战项目: http://www.the5fire.com/category/python实战/ python基础教程中的十个项目: python项目练习一:即时标记 python项目练习 ...

  8. 大四实习准备1_java构造器_android ListView

    2015-4-23 Java构造器 与类名同名;无返回值(void也不行);被不同的修饰符修饰是有区别的;当构造函数被private修饰时,只有本类可访问.其他类可以通过该类的get函数得到对象.如单 ...

  9. Json时间格式转换问题

    很多时候在数据库中取出数据,需要用Json来接收,但是接受出来的数据竟然是:/Date(1386040883000+0800)/ 这种格式. 这个时候就需要将Json格式,转换成Javascript格 ...

  10. UVa 1605 (构造) Building for UN

    题意: 有n个国家,要设计一栋长方体的大楼,使得每个单位方格都属于其中一个国家,而且每个国家都要和其他国家相邻. 分析: 紫书上有一种很巧妙的构造方法: 一共有2层,每层n×n.一层是每行一个国家,另 ...