相关文章推荐
星星上的企鹅  ·  As a reader --> ...·  8 月前    · 
独立的黑框眼镜  ·  sql:48: 错误: ...·  1 年前    · 

看官们,我们在前面章回中介绍了Foundation框架中的集合,本章回中将介绍Foundation框架中的字典。


字典和集合类似,表示多个对象存放在一起的容器,不过字典中的对象不是单个对象,而是键值对,其中的键和值必须是对象类型,而且每个键不能相同,每个键通过哈希值来确认是否相同,这点和集合一样。


字典有两个分类: 静态字典和动态字典 ,静态字典表示字典中的元素不可以被修改,反之可以修改的称为动态字典。这点和数组以及集合是一样的。静态字典使用NSDictionary类来表示,动态字典使用NSMutableDictionary类来表示。明白字典的概念和分类后,我们介绍与字典相关的操作。


初始化字典可以使用大括号或者 dictionaryWithObject:forKey: 方法,该方法有两个参数,第一个参数为值,第二参数为键。使用大括号初始化字典时键值对之间使用冒号分隔开。

还有一种常用的方法是使用 dictionaryWithObjects:forKeys :方法来初始化,该方法有两个参数,参数类型都是NSArray,第一个参数表示字典中所有的值,第二个参数表示字典所有的键。该方法也可以当作是把数组转化成字典方法。

获取字典中的键和值


有时候需要获取字典中的键和值,我们可以使用 allKeys 方法和 allValues 方法,这两个方法分别返回字典中所有的键和所有的值,返回键或者值存储在NSArray类型的数组中。该方法也可以当作是把字典转化成数组的方法。


通过键获取字典中的值


刚才介绍了获取字典中所有键和值的方法,也可以获取单个的值,通常使用 objectForKey: 方法来实现,该方法中的参数表示字典中的键,调用该方法时将返回与参数相对应的值。除此之外,我们还可以使用中括号来获取值,我们给一个简单的示例代码: value = dictionary[key];

使用枚举遍历字典


字典的遍历可以借助字典中的键来完成,首先获取字典中所有的键然后遍历所有键,同时通过键获取到与其对应的值,这样就间接完成了字典的遍历。


看官们,字典中还有其它的操作,我们就先不详细介绍了,大家可以参考官方文档。下面是我们提供的示例代码,大家可以结合上面的理论知识来分析代码。

#include<Foundation/Foundation.h>
int main() {
	//初始化字典
	NSDictionary *dic1 = @{@1:@"aa",@3:@"cc",@2:@"bb"};
	NSDictionary *dic2 = [NSDictionary dictionaryWithObject:@"aa" forKey:@1];
	//使用数组初始化字典
	NSArray *keys = [NSArray arrayWithObjects:@1,@3,@2,nil];
	NSArray *values = [NSArray arrayWithObjects:@"one",@"three",@"two",nil];
	NSDictionary *dic3 = [NSDictionary dictionaryWithObjects:values forKeys:keys];
	//获取字典中的key和value
	NSArray *allKey = [dic3 allKeys];
	NSArray *allValue = [dic3 allValues];
	NSLog(@"%@ key: %@ value: %@",dic1,allKey,allValue);
	//通过键获取值
	NSLog(@"%@, value: %@",dic2,[dic2 objectForKey:@1]);
	NSLog(@"%@, value: %@",dic2,dic2[@1]);
	NSLog(@"%@",dic3);
	//遍历字典
	for(NSString *key in allKey) {
		NSLog(@" %@ : %@",key,[dic3 objectForKey:key]);
	return 0;


在代码中我们添加了相关的注释,以方便大家理解代码。程序中字典的元素比较少,大家可以直接判断出运行结果,因此我们就不展示程序运行结果了,不过大家一定要自己动手运行程序,一边分析代码,一边对比程序运行结果是否符合代码分析的结果。


最后我们对本章回的内容做一个总结:

  • 1.字典中的元素是键值对,键和值必须是对象类型,而且字典中不能有重复的键;
  • 2.字典初始化可以使用大括号或者类提供的相关方法;
  • 3.字典可以和数组进行相互转换,转换时使用相应的方法就可以;
  • 4.可以获取字典中所有的键和值,也可以通过某个键获取与其对应的值,获取方法有两种;
  • 5.遍历字典可以通过遍历字典的键间接实现,常用枚举的方式来遍历字典;
  • 6.字典分静态和动态两种形式,以上所有的操作都不会修改原来字典中的内容;


看官们,本章回的内容就介绍到这里,欲知后事如何且听下回分解!

 常用的几个数据字典:user_objects : 记录了用户的所有对象,包含表、索引、过程、视图等信息,以及创建时间,状态是否有效等信息,是非DBA用户的大本营。想知道自己有哪些对象,往这里查。user_source :包含了系统对象的原码,如存储过程,FUNCTION、PROCEDURE、PACKAGE等信息cat或Tab :包含当前用户所有的用户和视图信息和同义词信息,cat还 1.[代码][Java]代码package com.iss.framework.util;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import com.iss.fit.dao.system.SysDictionaryDAO;import com.is... 文章目录静态数据字典三组常用的数据字典视图其他常用特殊数据字典视图动态性能视图静态数据字典与动态性能视图的比较 静态数据字典 数据字典是Oracle数据管理系统的核心,它存储整个Oracle数据库的所有数据定义信息,如数据库的物理存储结构和逻辑存储结构,存储空间的分配使用情况数据库内的对象及其约束,以及用户、角色、权限设置等。 Oracle数据字典由以下两种对象类型组成: 基表:大部分数据是以加密格式存储的,用户不应该直接访问基表。 用户访问视图:这些视图基于数据字典基表而创建,它们汇总数据字典基表内的信 以前做字典树一直用动态的字典树,每次开辟新空间,需要 new ,删除时delete, 这样动态,节省内存,却要每次开辟和释放空间,饿很难浪费时间, 静态字典树, 是事先开辟一块足够的空间,需要时区取,计较节省时间,有时候却浪费了不必要的内存,写静态字典树,可以开二维数组,也可以用结构体加上指针; 结构体 静态字典树模板 #define MAX 26 //字符集大小 静态字典的访问,在多线程环境下,存在一个并发控制问题。 因为项目使用了静态字典,发现经常报已经添加了重复的键的异常,即使做了if(dic.Contains(key))的判断,就赋值的操作的,也不行。 就想到了并发的问题,所以就自己写demo试了一下,果然是缺少锁的问题,加一个lock锁就好了。 同时也意识到一个问题,只要是多线程环境,去访问一个共有的资源都存在并发的问题,这个我本来是... oracle 静态数据字典视图 和 动态数据字典视图由于ORACLE数据库的版本不同视图的内容也不同,必须入时有效的获取ORACLE系统信息才能找到很好的对策。<br /><br />a:静态数据字典视图名一般用复数,而动态性能视图名一般用单数,比如dba_tablepsaces vs v$tablespace。<br />b:静态数据字典视图只有在数据库open的情况下才可以访问,而部分动态性能视图可以在数据库非open状态下使用。<br />c:静态数据字典视图里看到的列信息一般都是大写,而动态性能视图 dic={'001':{'name':'刘争','age':18,'num':'001'},'002':{'name':'小小争','age':19,'num':'002'}} class liuzheng(): @staticmethod def writedate(): f=open('888.txt','w') for k,v in dic.i... 虽然看起来没有什么实用价值,但是如果在不知道字典对象的键值时,这个办法就会变得很有用!如果在树结构,有时会用到递归,在每一层有个计算结果,我希望把这个结果保存起来,再遍历这一层时要用到这个结果时,这个静态字典对象就可以帮上忙。  下面的代码是flex实现                       xmlns:s="library://ns.adobe.com/f 1、python其实有3个方法,即实例方法,类方法(classmethod),静态方法(staticmethod) def foo(x): 一般函数   print "executing foo(%s)"%(x) class A(object):   def foo(self,x): 实例方法     print "executing foo(%... Python字典(dict)更新元素在除了使用下标的方式可以更新字典的元素,我们还可以使用 Python 内置的 update 方法来更新元素,update 方法可以接受同时更新多个值。使用 update 方法来更新元素的值时,如果字典的 key 已经存在,那么同样会更新值,不存在,则插入值,同时,update 方法的 key 不需要加双引号。字典update更新元素详解语法dict.updat... Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。一、创建字典字典由键和对应值成对组成。字典也被称作关联数组或哈希表。基本语法如下:dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}也可如此创建字典dict1 = { 'abc': 456 }dict2 = { 'abc': 123, 98... 1、字典的键存在时,可以通过字典名+下标的方式访问字典改键对应的值,若键不存在则会抛出异常。如果想直接向字典添加元素可以直接用字典名+下标+值的方式添加字典元素,只写键想后期对键赋值这种方式会抛出异常。>>>a=['apple','banana','pear','orange']>>> a['apple', 'banana', 'pear', 'orang...