字典

主要知识点:

1.NSDictionary 类

2.NSMutableDictionary 类

3.了解NSMutableDictionary 与 NSDictionary 的继承关系

4.补充:

散列存储:又称hash存储,是一种力图将数据元素的存储位置与关键码之间建立确定对应关系的查找技术。散列法存储的基本思想是:由节点的关键码值决定节点的存储地址。散列技术除了可以用于查找外,还可以用于存储。

散列是数组存储方式的一种发展,相比数组,散列的数据访问速度要高于数组,因为可以依据存储数据的部分内容找到数据在数组中的存储位置,进而能够快速实现数据的访问,理想的散列访问速度是非常迅速的,而不像在数组中的遍历程,采用存储数组中内容的部分元素作为映射函数的输入,映射函数的输出就是存储数据的位置,这样的访问速度就省去了遍历数组的实现,因此时间复杂度可以认为为O(1),而数组遍历的时间复杂度为O(n)。

===========    NSDictionary不可变字典    ================

1、什么是字典(key-value)

字典是也是一种集合结构,功能与我们现实中的字典工具一样

2、字典的元素是什么

任意类型的对象地址构成键值对

3、什么是键值对

键值对是由key和value构成必须一一对应

键值对中的key必须保证是唯一的

4、字典的存储方式

字典是一种无序保存的集合

5、如何查找值

根据键值对中的key找到相应的值

================================================

1. NSDictionary(不可变)的创建

1) 如何创建一个字典对象

(1)创建空字典(不用)

NSDictionary *dic = [[NSDictionary alloc] init];

dic = [NSDictionary dictionary];

(2)创建带有对象的字典

/*

1.一对键值对(key-value)

@"key1" = @"1111"

*/

dic = [NSDictionary dictionaryWithObject:@"1111" forKey:@"key1"];

/*

2.有多个键值对

*/

NSArray *objArray = @[@"value1",@"value2"];

NSArray *keyArray = @[@"key1",@"key2"];

dic = [NSDictionary dictionaryWithObjects:objArray forKeys:keyArray];

/*

3.有多个键值对(另外写法)

*/

dic = [NSDictionary dictionaryWithObjectsAndKeys:@"value1",@"key1",@"value2",@"key2",@"value3",@"key3", nil];

NSLog(@"%@",dic);

/*

4.拷贝指定字典的键值对,返回一个新的字典

*/

[NSDictionary dictionaryWithDictionary:<#(NSDictionary *)#>];

/*

5.快速创建

公式(键值对以","分隔):

@{key:value,key:value...}

*/

dic = @{};//创建一个空字典

dic = @{@"key1":@"value",@"key2":@"value2",@"key6":@"value6"};

2、获取键值对个数

[dic count]

3、如何通过key获取对应的value

(1)[dic objectForKey:@“key”];字典方法

id obj = [dic valueForKey:@"key3”];字典方法

[arr objectAtIndex:index];数组方法

(2)obj = dic[@"key2"];

注意:A[B] 如果B是整数,A是数组,

如果B是字符串,A就是字典

4、获取字典中所有的key

[dic allKeys]

5、获取字典中所有的value

[dic allValues]

6.把字典写入到指定文件中

dic writeToFile:path atomically:YES];

7.从文件里面读取字典数据

[NSDictionary dictionaryWithContentsOfFile:path];

8、遍历字典内容

1)枚举器法:

<1>键的遍历:

keyEnumerator消息

作用:获取所有的key值

NSEnumerator *emunerator = [dict keyEnumerator];

id obj;

while (obj = [emunerator nextObject]) {

NSLog(@“%@“, obj);

}

<2>值得遍历

objectEnumerator 消息

2)快速枚举法:得到的是键

for (id key in dict)

{

NSLog(@“key — %@, value = %@, key, [dict objectForKey:obj]); // 得到了键就得到了值

}

9.NSDictionary和NSArray的对比

1)字典相对与数组的优点

字典获取元素速度比数组快,原因是字典通过哈希算法得到每个元素具体的位置

2)获取元素的方式

数组通过下标获取指定元素的内容     objectAtIndex

字典通过key来获取指定元素的内容    objectForKey

============NSMutableDictionary可变字典================

1、NSMutableDictionary和NSDictionary的区别

2、如何创建

//初始化一个空字典

NSMutableDictionary *dic = [NSMutableDictionary dictionary];

dic = [[NSMutableDictionary alloc] init];

3、增加键值对

/*

(1)key是唯一的,value可以一样。

(2)添加键值对的时候,如果key存在,会替换原来的值(替换)。如果key不存在,添加一个键值对(添加)。

*/

(1)[dic setObject:@"value1" forKey:@"key1"];

注意:不存在键或者键已存在

不存在会保存失败,且会导致程序奔溃,存在则会覆盖

4.在当前字典中添加另外一个字典的内容

/*

dic2里面键值对添加到dic1

[A addEntriesFromDictionary:B] 把B里面键值对添加字典A里面,如果B里面key如果A里面存在相同的key的话也会替换value.

*/

[dic1 addEntriesFromDictionary:dic2];

[dic1 setValuesForKeysWithDictionary:dic3];

5.可变字典的删除

1)通过指定key删除一组键值对

[dic1 removeObjectForKey:@"key1"];

2)通过指定多个key来删除相关的键值对

[dic1 removeObjectsForKeys:@[@"key1",@"key2",@"key4"]];

3)删除字典中所有的键值对

[dic1 removeAllObjects];

6、修改

1) 修改整个字典

[dic1 setDictionary:dic3];

2) 修改键值对

[dic1 setObject:<#(id)#> forKey:@“字典存在的key”];

iOS开发-OC语言 (五)字典的更多相关文章

  1. iOS开发-OC语言 (一)oc数据类型

    分享一套以前学习iOS开发时学习整理的资料,后面整套持续更新: oc数据类型 数据类型:基本数据类型.指针数据类型 基本数据类型:数值型.字符型(char).布尔型.空类型(void) 指针数据类型: ...

  2. iOS开发-OC语言 (四)数组

    知识点 1.NSArray 2.NSMutableArray 1.数组的基本用法: 2.数组的遍历 3.数组排序 ===========   NSArray  不可变数组  ============= ...

  3. iOS开发-OC语言 (三)字符串

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 24.0px "PingFang SC" } p ...

  4. iOS开发-OC语言 (七)继承、多态、类别

    继承.多态.类别 学习目标 1.继承的含义 2.父类子类的别称 3.字段和消息的继承 4.重写和重写消息的调用 5.多态 6.类别(Category) ======================== ...

  5. iOS开发-OC语言 (二)类的设计

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 24.0px Helvetica } p.p2 { margin: 0.0px 0.0px 0.0px 0. ...

  6. iOS开发-OC语言 (六)点语法和@property

    点语法和@property 知识点 1.setter/getter函数 2.点语法 3.@property语法和属性 ======================================== ...

  7. Android与Swift iOS开发:语言与框架对比

    Swift是现在Apple主推的语言,2014年新推出的语言,比Scala等“新”语言还要年轻10岁.2015年秋已经开源.目前在linux上可用,最近已经支持Android NDK:在树莓派上有Sw ...

  8. Android &Swift iOS开发:语言与框架对比

    转载自:http://www.infoq.com/cn/articles/from-android-to-swift-ios?utm_campaign=rightbar_v2&utm_sour ...

  9. iOS开发OC基础:Xcode中常见英文总结,OC常见英文错误

    在开发的过程中难免会遇到很多的错误,可是当看到系统给出的英文时,又不知道是什么意思.所以这篇文章总结了Xcode中常见的一些英文单词及词组,可以帮助初学的人快速了解给出的提示.多练习,就肯定能基本掌握 ...

随机推荐

  1. Python开发工具Wing IDE发布5.0.1版本

    Wing IDE是一个跨平台的Python IDE,提供了一个专业代码编辑.自动编辑.自动完成.重构.强大的图形调试器.版本控制.单位测试.搜索及其他功能.目前已经成为最全面.最综合.最先进的智能化P ...

  2. jquery背景动画插件使用

    在网页制作动画特效的时候,有时候想通过背景插入图片,然后通过控制背景显示的位置来实现一些动画效果,这样就不用使用绝对定位控制left和top来实现动画效果!但是jquery本身的动画函数是不支持背景动 ...

  3. 探索Android该Parcel机制上

    一.先从Serialize说起 我们都知道JAVA中的Serialize机制.译成串行化.序列化……,其作用是能将数据对象存入字节流其中,在须要时又一次生成对象.主要应用是利用外部存储设备保存对象状态 ...

  4. Solr安装(Tomcat)

    Solr安装(Tomcat)   安装环境 Windows 7 64bit Apache-tomcat-8.0.9-windows-x64 Solr-4.9.0 JDK 1.8.0_05 64bit ...

  5. WinForm中回车键实现文本框之间的跳转

    利用窗体的KeyPreView .设置KeyPreView = true 设置窗体的KeyPreView 属性为True后,那么窗体内的子控件响应KeyPress事件(或其他事件)之前,会先响应窗体的 ...

  6. SpringMVC视图

    SpringMVC视图机制详解[附带源码分析] 目录 前言 重要接口和类介绍 源码分析 编码自定义的ViewResolver 总结 参考资料 前言 SpringMVC是目前主流的Web MVC框架之一 ...

  7. Shards

    跟我一起云计算(5)——Shards   什么是sharding Sharding的基本思想就要把一个数据库切分成多个部分放到不同的数据库 (server)上,从而缓解单一数据库的性能问题.不太严格的 ...

  8. Mason 简单笔记

    Mason的对象 ------------------------------- Request对象 Mason有两个全局预处理对象叫做:$r和$m $r是mod_perl的请求对象,它提供了Perl ...

  9. SolrCloud攻略

    SolrCloud攻略 近期一直在使用SolrCloud,乘着酒醉大概总结一下. 1.安装 原来一直有个误区,认为SolrCloud启动时,必须至少有个core才可以,其实不然. 首先按照Solr官方 ...

  10. cegui-0.8.2编译过程详解

    cegui 编译过程详解(cegui-0.8.2) cegui配置整了好长时间了,在一位大牛帮助下终于搞定了,网上的教程大多是老版本的,cegui-0.8.2版的配置寥寥无几,现在总结一下,献给正在纠 ...