iOS开发-OC语言 (五)字典
字典
主要知识点:
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语言 (五)字典的更多相关文章
- iOS开发-OC语言 (一)oc数据类型
分享一套以前学习iOS开发时学习整理的资料,后面整套持续更新: oc数据类型 数据类型:基本数据类型.指针数据类型 基本数据类型:数值型.字符型(char).布尔型.空类型(void) 指针数据类型: ...
- iOS开发-OC语言 (四)数组
知识点 1.NSArray 2.NSMutableArray 1.数组的基本用法: 2.数组的遍历 3.数组排序 =========== NSArray 不可变数组 ============= ...
- iOS开发-OC语言 (三)字符串
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 24.0px "PingFang SC" } p ...
- iOS开发-OC语言 (七)继承、多态、类别
继承.多态.类别 学习目标 1.继承的含义 2.父类子类的别称 3.字段和消息的继承 4.重写和重写消息的调用 5.多态 6.类别(Category) ======================== ...
- 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. ...
- iOS开发-OC语言 (六)点语法和@property
点语法和@property 知识点 1.setter/getter函数 2.点语法 3.@property语法和属性 ======================================== ...
- Android与Swift iOS开发:语言与框架对比
Swift是现在Apple主推的语言,2014年新推出的语言,比Scala等“新”语言还要年轻10岁.2015年秋已经开源.目前在linux上可用,最近已经支持Android NDK:在树莓派上有Sw ...
- Android &Swift iOS开发:语言与框架对比
转载自:http://www.infoq.com/cn/articles/from-android-to-swift-ios?utm_campaign=rightbar_v2&utm_sour ...
- iOS开发OC基础:Xcode中常见英文总结,OC常见英文错误
在开发的过程中难免会遇到很多的错误,可是当看到系统给出的英文时,又不知道是什么意思.所以这篇文章总结了Xcode中常见的一些英文单词及词组,可以帮助初学的人快速了解给出的提示.多练习,就肯定能基本掌握 ...
随机推荐
- WCF中队列服务详解
WCF中队列服务详解 一.引言 在前面的WCF服务中,它都要求服务与客户端两端都必须启动并且运行,从而实现彼此间的交互.然而,还有相当多的情况希望一个面向服务的应用中拥有离线交互的能力.WCF通过服务 ...
- Mac OSX操作系统安装和配置Zend Server 6教程(1)
作为web开发人员,应该熟悉掌握各种系统下安装和配置web服务器与站点的技术. 随着越来越多的开发人员选择Zend Server服务器,慧都推出了在Mac OSX系统安装和配置Zend Server ...
- C#中IList<T>与List<T>的区别
首先IList 泛型接口是 ICollection 泛型接口的子代,并且是所有泛型列表的基接口.它仅仅是所有泛型类型的接口,并没有太多方法可以方便实用,如果仅仅是作为集合数据的承载体,确实,IList ...
- Manager(管理器)
Manager(管理器) 索引 意图 结构 参与者 适用性 效果 实现 实现方式(一):Manager 模式的示例实现. 意图 将对一个类的所有对象的管理封装到一个单独的管理器类中. 这使得管理职责的 ...
- Hive UDAF开发之同时计算最大值与最小值
卷首语 前一篇文章hive UDAF开发入门和运行过程详解(转)里面讲过UDAF的开发过程,其中说到如果要深入理解UDAF的执行,可以看看求平均值的UDF的源码 本人在看完源码后,也还是没能十分理解里 ...
- jQuery选择表格中的列
以选择table中的第一列为例: 方式1: $("table tr").find("td:first").html("first column&quo ...
- GNU 项目(开源社区的由来,背后的哲学)
转自译言网:http://article.yeeyan.org/view/88497/59257/ 第一个软件共享社区 当我在1971年开始在麻省理工人工智能实验室工作时, 我成为一个已经存在多年的软 ...
- VS调试技巧与快捷键&&VS快捷键
VS调试技巧与调试快捷键 1.添加断点或取消断点:F9(或者点击代码行最左边的灰色行) 2.调试:F10逐过程(不进入函数内部,直接获取函数运行结果) F11逐语句(会进入函数),如果想跳出函数 ...
- Scrum与高效能人士的执行4原则
Scrum与高效能人士的执行4原则 分享了高效能人士的执行4原则,发现它和Scrum非常相近,可以形成互补. Scrum框架: 高效能人士的执行4原则框架: Scrum与4原则 Sprint Back ...
- 使用 Entity Framework Code First
使用 Entity Framework Code First 在家闲着也是闲着,继续写我的[ASP.NET MVC 小牛之路]系列吧.在该系列的上一篇博文中,在显示书本信息列表的时候,我们是在程序代码 ...