跑字典中的“字典”爱是什么么类型的文件?

BT12【原版】镜像文件【自称是最快的破解软件,无须跑字典和抓包,直接攻击路由器】下载 - 迅载网盘
帐号 & 记住状态
密码 &登录
我的网盘文件          
软件昨日热门排行
本类其它文件
网盘推荐专辑
BT12【原版】镜像文件【自称是最快的破解软件,无须跑字典和抓包,直接攻击路由器】是由上传到迅载网盘,供大家免费下载。
250.22MB100 分
166.60MB100 分
电信高速下载
联通高速下载
本网站软件或游戏版权归作者所有,如果无意之中侵犯了您的版权,请邮件告知或通知网站客服,本站将在3个工作日内删除。
版权所有 
&&&&&&&&&&&&&&&&&&&&字典_百度百科
[zì diǎn]
字典(拼音: zì diǎn;英文:dictionary,character dictionary)是为字词提供、意思解释、、等等的工具书。在西方,没有字典的概念,全是中国独有的。 字典收字为主,也会。[1]
词典或辞典收词为主,也会收字。为了配合社会发展需求,词典收词数量激增并发展出不同对象、不同行业及不同的词典。随著吸收的元素,更有百科辞典
字典属工具书类。
第一部字典性质的《》的这个名称它很明显就明确了字典的功能。“尔”也写作“迩”是接近的意思,“雅”是“正”的意思,指“”,即在语音、词汇和语法等方面都合乎规范的标准语。《尔雅》的意思是接近、符合雅言,就是以雅正之言解释语词和方言,使之接近规范。
中国古代字典都称为“”,直到《》问世才称“字典”的。最早的一本汉语词典是《》成书的上限不早于战国,因为书中所用的资料,有的来自《》、《》、《》等书,而这些书是战国时代的作品;成书的下限不会晚于西汉初年,因为在时已经设置了《》博士,到汉武帝时已经出现了文学的《》。近代大致可分为两类,一类是综合性的,如《》;一类是专门性的,如《》。
字典是为字词提供、意思的解释、、等等的工具书。在西方,没有字典的概念,全是中国独有的。字典收字为主,亦会收词。词典或辞典收词为主,也会收字。为了配合社会发展需求,词典收词数量激增并发展出不同对象、不同行业及不同用途的词典。随著吸收的元素,更有百科辞典的出现。
汇集单字,按某种查字方法编排,并一一注明其、意义和用法的工具书。是汉语和的语言文字(如、)所特有的一种。以单个的字为收录对象,也兼收少量。
字典源远流长,在中国古代称为(一说字书兼指字典、词典)。字书一词,作为解释文字的著作的泛称,在南北朝时已经通用,但史志将其归入小学类,直至清乾隆年间编《》时才在小学类中单列字书一类。见于著录最早的字书,是相传时出于太史籀之手的《》(据近人考证,该书实为春秋战国间秦人所作)。战国至西汉,为中国字书的萌芽时期。代表作除《》外,还有秦代的《苍颉篇》、的《爰历篇》、的《篇》,西汉的《》、的《训纂篇》等。它们大都只是编次文字,并无解说。第一部有系统的字书,是东汉许慎的《说文解字》〔成书于东汉永元十二年(100)〕。该书是我国第一部系统地分析字形和字源的字书,也是世界上最古的字书之一。它首创部首编排法,对字义 、、进行全面诠释,为以后字书的发展奠定了基础。其后仿照《说文解字》编成的字书很多,现存主要有南朝梁陈之间的《玉篇》,北宋、等的《类篇》,明的《》等。清康熙五十五年(1716)等编的《》问世后,“字典”一词较“字书”更为通行。取“字典”为书名的,通常认为始于《康熙字典》,也有人认为唐代《一切经》中已引用《字典》一书,“字典”一词的出现可上溯至唐以前。
字典可分为详解字典和特种字典。详解字典是就字的形、音、义进行全面解释,如《新华字典》、《》等。特种字典亦称专门字典,字典是一种以字为单位,按一定次序排列,每个字注明读音、意义和用法的工具书。
字典使用历史
第一部汉字字典
中国最早的词典是《》,成书时期大约在汉朝之前,因为《
尔雅》把字分类并作出解释,儒家学者把《尔雅》归类为。
及后,大约在公元30年-124年,汉朝许慎编写《》,创立了理论,制定了中文字部首的基础,是字书中的佼佼者。它是我国第一部系统地分析字形和考究字源的字书,也是世界上最古的字书之一。
1190年,即乾祐庚戍二十一年,骨勒茂才完成了西夏的第一部中文双语字典-《》,成为考古学家翻译西夏文的依据。
在1716年(康熙五十五年),第一部正名为字典的《》面世。
第一部称为字典的字典
第一部称为“字典”的书,是清朝由等30人花了6年时间编成的《康熙字典》。看后曾说这部书“善美兼备”,可奉为“”,因此命名为“字典”。以后,凡是这类解释单字的书,就都称作“字典”了。
《》当中除了列举字的出处外,还罗列《》、《》、《》、《》、《》等等的,并对同音切语加以归并。
第一部双语字典
1815年,英国传教士在澳门为了翻译工作,编写了中国第一部英语学习字典《》。马礼逊在伦敦时候,曾经得到一名中国人的教导下学习一年汉语,抵达广东后,曾翻译《》及《》,并且编写过书籍,所以对中国文化及语言有一定了解。因此在《华英字典》可以找到很多出自《》和《》的例句。《华英字典》是世界上第一本英汉-汉英
对照的字典,篇幅大内容丰,有丰富的例句及解释,并收录大量成语、俗语。1844年(Samuel Wells Williams)的《英华韵府历阶》及1847年(Walter Henry Medhurst)的《》都把它当作参照基础。
1866年,德国传教士在香港出版一部两卷本的《英华字典》,是香港最早的双语字典。罗存德在1848年到香港传福音,于1853年成为香港的中国福音传道会的主要负责人。他曾编写过《英话文法小引》及《英华行箧便览》。
1915年,出版《》。
第一部甲骨文字典
虽然是最古老的成熟的汉字,但因发现确认为文字最晚,所以甲骨文字典出现仅一百多年。清著的《》是甲骨文的第一部字典。1903年斋石印出版。 1903年,刘鹗从所藏的五千余片甲骨中精选1058片,编成《铁云藏龟》共六册。原书有和的序以及刘鹗的自序。
后的《甲骨文字典》由四川辞书出版社出版,的《新编甲骨文字典》由出版,的《甲骨文画帖字典》
由出版,编辑的《》由出版。
甲骨文字典
古文字一贯以笔画和音序作为索引,直到2010年12月由编辑
出版了所著《甲骨文字典》。采用了汉语拼音和笔画索引,使甲骨文与现代汉字有了真正意义上的接轨。成为甲骨文工具书的里程碑。
甲骨文是最早的成熟的汉字系统,是世界四大中唯一与活文字有传承关系古文字。众多甲骨文学者历尽毕生精力,已辩识出甲骨文近两千个,辩识很难,经辩识后再认知则很容易。每一个小学生利用汉语拼音的索引,就可以轻而易举地认识这些。从而对自己一生的文字修养都有好处。汉字的基础要从甲骨文打起,而这本《甲骨文字典》则是打好汉字基础的有力工具。这本《甲骨文字典》也成为最年轻的汉字字典。
字典字典种类
《》 东汉许慎著。全书以为主体,根据不同的,分析字形结构,体例严整,是中国最早的对后代影响极大的一部字典。
《》 梁代顾野。所收部首比《说文解字》多,排列次序也有很大变动。每字下面不仅注明字义,而且举出古籍的例证和前人的注解,极其详备。
《》 宋代等编。全书按部首编排,分为14篇。每字下先列反切,后出训解,体例比较严谨。
《》 明代著。全书按楷书笔画,把《说文解字》等的500多部首,改并为214部首;部首次序按笔画多少排列,少者在前,多者在后。这部字书在明代流传很广。
《》 明代著。全书共241部,注释繁博。
《》 清代康熙皇帝令张玉书等人参照《字汇》和《正字通》编纂而成的一部大型字典。全书分为12集214部,每字下面详列,并加注,字义之下都引古籍中的文句为例。收字极多。
《》、欧阳溥存等编。1915年中华书局出版。全书是在《康熙字典》的基础上进行革新,改正错误4000余条,增加1000多字。
《》主编。1953年由出版。全书按,共189部;所收单字8500个左右;在释义上分别标出、比喻义和转义。这是第一本按汉语拼音音序排列的小型字典。
现代的字典都提供了很多功能,其中两大功能分别是:
①以沟通为主,帮助对文字的理解、翻译及。
②以知识为主,针对某事物来寻获知识。
字典可分为详解字典和特种字
①详解字典是就字的形、音、义进行全面解释,如《》、《汉语大字典》等。
②特种字典亦称专门字典,它仅就字的某一方面进行解释,如正字字典、正音字典、虚字字典、难字字典等。
字典字的排序
中文字是,排列方式正是根据部首。部首在许慎创立时,共有540个
,后来不断归纳淘汰,《》中的部首只剩下240余个,到了《》只有200余个。在1925年之后,部分中文字典开始使用由发明的,而大部分现代汉语字典的字词却跟据普通话来排列的。字典是为字词提供、意思解释、例句、用法等等的工具书。在西方,是没有字典的概念,全是中国独有的。 字典收字为主,亦会收词。词典或辞典收词为主,也会收字。为了配合社会发展需求,词典收词数量激增并发展出不同对象、不同行业及不同用途的词典。随著吸收的元素,更有百科辞典的出现。
字典里的字很齐全,常用的,不常用的都有,是学生学习的好帮手。
比较好的字典就是《》,建议大家要定期购买最新版字典,因为有的新旧字典的字义,字音会产生变化。
字典: zì diǎn
character dictionary
附加解释:wordbook, glossary
词语解释:
以字为单位,按一定顺序编排,逐一说明字的、意义和用法的工具书。中国古代称“”,直到《》问世才称“字典”。最早的是东汉许慎编的《说文解字》[3]
。近代大致可分为两类,一类是综合性的,如《》;一类是专门性的,如《》。
那本字典是属于我的。
That dictionary belongs to me.
请把字典递给我。
Please pass the dictionary to me.
他可说是个。
He is, as it were, a walking dictionary.
这本字典有3 万多词条。
This dictionary has over 30000 entries.
活字典;学识渊博的人
walking dictionary , living dictionary , a walking/living dictionary , a walking dictionary , a living dictionary
= Concise Oxford Dictionary 《简明牛津字典》
to consult a dictionary
= Pocket Oxford Dictionary 《袖珍牛津字典》
dictionary
古典(拉丁,希腊)语韵字典
etymologicon
字典之标题字
字典引申含义
黑客破解方面的字典是指一个包含很多密码的文本文件,黑客常用相关软件将数字、字母、符号等按照特定组合方式
生成包含很多密码的字典文件,然后通过特定软件使用字典中的密码去不断尝试登陆,直到登陆成功。该过程被称为,也叫穷举、跑字典。
.汉典[引用日期]
第一部汉语拼音索引的甲骨文字典
.许慎文化园[引用日期]
.查字典[引用日期]
企业信用信息Cocos2d-x中的词典类CCDictionary深入分析 - 开源中国社区
当前访客身份:游客 [
当前位置:
[Cocos2d-x相关教程来源于红孩儿的游戏编程之路 CSDN博客地址:]&&
红孩儿Cocos2d-X学习园地QQ群: 加群写:Cocos2d-x
本章为我的Cocos2d-x教程一书初稿。望各位看官多提建议!
首先感谢CSDN对本博的支持,感谢各位朋友的支持。“HelloWorld深入分析”的阅读量破万了!!!
&Cocos2d-x中的词典类CCDictionary深入分析
&&&&&&&&& 本节所用Cocos2d-x版本:cocos2d-2.0-x-2.0.2
& & & &在引擎开发中,通过名称或索引快速找到所对应的节点,资源,物体是最最基础的算法需求。如何更高效的满足引擎灵活的存储与查询需求,是任何一款引擎要考虑的问题,在诸多款开源或商业引擎中,都有过为了解决此类需求而专门设计的模版类或容器,它们通常被称为“词典”或“字典”。
& & & &我们在Cocos2d-x中的很多地方也遇到过词典类CCDictionary。它是利用哈希表算法来进行CCObject管理的一个类。学习它可以让我们对于Cocos2d-x的内部管理机制有更清晰的认识。同时也可以学习这种思想,帮助我们在以后的项目开发中设计出更棒的管理器架构。
& & & &CCDictionary中的元素是通过哈希表进行存储的,这个哈希表算法是放在uthash.h中的。其封装了大量的宏来进行相应的哈希表处理。
& & & &通过HASK_MAK_TABLE宏来创建一个原始的哈希表。默认的存储空间为32。这个数值是由宏HASH_INITIAL_NUM_BUCKETS定义的。每次往里面插入元素时会判断存储空间是否足够,如果不足会扩展为原来的2倍大小的内存空间,并将原来的哈希表数据放入其中。
其中比较重要的一些宏:
HASH_MAKE_TABLE:建立一个哈希表。
HASH_ADD:将元素放入哈希表。
HASH_FIND:查找元素。
HASH_FIND_STR: 通过名称字符串查询哈希表中的相应词汇。
HASH_FIND_INT: 通过索引查询哈希表中的相应词汇。
HASH_DELETE:从哈希表中删除元素。&
HASH_EXPAND_BUCKETS: 扩展为原来的2倍大小的内存空间,并将原来的哈希表数据放入其中。
首先来看CCDictionary.h:
#ifndef __CCDICTIONARY_H__
#define __CCDICTIONARY_H__
//需要哈希表的支持
#include &support/data_support/uthash.h&
#include &CCObject.h&
#include &CCArray.h&
#include &CCString.h&
//Cocos2d命名空间
NS_CC_BEGIN
//声明一下CCDictionary类,因为CCDictElement要用到CCDictionary指针。
//词典元素,或者简单理解就是词典中的一个词汇。我们从小查词典都知道,通过词汇名称或索引查找到对应的解释。解释与词汇名称或索引之间是一一对应的关系。与这种关系相同,在这个词汇类中存储一个字符串名称或一个索引以及与其相应的CCObject指针,这个CCObject指针就相当于是我们查出来的解释一样与字符串名称或索引构成了对应关系。
class CC_DLL CCDictElement
//定义字符串名称的长度.
#define MAX_KEY_LEN
//构造函数。
//参1:字符串名称。
//参2:对应的CCObject指针。
CCDictElement(const char* pszKey, CCObject* pObject)
//初始化。
m_pObject = pO
const char* pStart = pszK
//字符串的字节长度
int len = strlen(pszKey);
if (len & MAX_KEY_LEN )
//如果长度大于MAX_KEY_LEN,截取后面MAX_KEY_LEN长度字符串。
char* pEnd = (char*)&pszKey[len-1];
pStart = pEnd - (MAX_KEY_LEN-1);
//字符串COPY
strcpy(m_szKey, pStart);
//构造函数
//参1:所在哈希表中的索引
//参2:对应的CCObject指针。
CCDictElement(int iKey, CCObject* pObject)
m_iKey = iK
m_pObject = pO
//取得名称字符串。
inline const char* getStrKey() const
CCAssert(m_szKey[0] != '\0', &Should not call this function for integer dictionary&);
return m_szK
//取得哈希索引。
inline int getIntKey() const
CCAssert(m_szKey[0] == '\0', &Should not call this function for string dictionary&);
return m_iK
//取得CCObject指针。
inline CCObject* getObject() const
return m_pO
//初始化。
inline void init()
m_iKey = 0;
m_pObject = NULL;
memset(m_szKey, 0, sizeof(m_szKey));
memset(&hh, 0, sizeof(hh));
char m_szKey[MAX_KEY_LEN+1]; //存储名称的字符数组。
//哈希表索引
CCObject* m_pO
//哈希值(CCObject指针)
//哈希表结构指针
friend class CCD
//词典为友元类
//遍历词典中的所有词汇的一个宏,它内部调用HASH_ITER来进行for循环遍历链表。
#define CCDICT_FOREACH(__dict__, __el__) \
CCDictElement* pTmp##__dict__##__el__ = NULL; \
HASH_ITER(hh, (__dict__)-&m_pElements, __el__, pTmp##__dict__##__el__)
//词典类,由CCObject派生
class CC_DLL CCDictionary : public CCObject
//构造函数
CCDictionary();
//析构函数
~CCDictionary();
//取得所有词汇的数量。
unsigned int count();
//返回所有的查询关键字。
CCArray* allKeys();
//取得对应CCObject指针的所有关键字或索引值。
CCArray* allKeysForObject(CCObject* object);
//通过查询关键字取得对应CCObject指针
CCObject* objectForKey(const std::string& key);
//通过哈希索引值取得对应CCObject指针
CCObject* objectForKey(int key);
//通过查询关键字取得对应CCString指针
const CCString* valueForKey(const std::string& key);
//通过哈希索引值取得对应CCString指针
const CCString* valueForKey(int key);
//设置一个CCObject和对应的名称存入词典。
void setObject(CCObject* pObject, const std::string& key);
//设置一个CCObject和对应的哈希索引存入词典。
void setObject(CCObject* pObject, int key);
//按照查询关键字找到对应CCObject并删除。
void removeObjectForKey(const std::string& key);
//按照哈希索引找到对应CCObject并删除。
void removeObjectForKey(int key);
//按照容器中的查询关键字找到对应CCObject并删除。
void removeObjectsForKeys(CCArray* pKeyArray);
//从词典中删除相应的词汇。
void removeObjectForElememt(CCDictElement* pElement);
//从词典中清空所有的词汇。
void removeAllObjects();
//重载CCObject的拷贝函数。产生一个一模一样的词典。
virtual CCObject* copyWithZone(CCZone* pZone);
//静态函数,取得单例的词典。请改用create函数,因为这个函数以后将被删除掉。
CC_DEPRECATED_ATTRIBUTE static CCDictionary* dictionary();
//静态函数,取得一个指定词典的COPY,请改用createWithDictionary函数,因为这个函数以后将被删除掉。
CC_DEPRECATED_ATTRIBUTE static CCDictionary* dictionaryWithDictionary(CCDictionary* srcDict);
//静态函数:从一个plist文件中加载词典内容。此函数创建的词典是交由内存管理器来进行资源计数的,不需手动release。但请改用createWithContentsOfFile函数,因为这个函数以后也将被删除掉。
CC_DEPRECATED_ATTRIBUTE static CCDictionary* dictionaryWithContentsOfFile(const char *pFileName);
//静态函数:从一个plist文件中加载词典内容,但此函数是多线程安全的,另外此函数创建的词典需要手动release。请改用 createWithContentsOfFileThreadSafe函数,因为这个函数以后也将被删除掉。
CC_DEPRECATED_ATTRIBUTE static CCDictionary* dictionaryWithContentsOfFileThreadSafe(const char *pFileName);
//静态函数,创建一个新词典
static CCDictionary* create();
//静态函数,取得一个指定词典的COPY。
static CCDictionary* createWithDictionary(CCDictionary* srcDict);
//静态函数:从一个plist文件中加载词典内容。
static CCDictionary* createWithContentsOfFile(const char *pFileName);
//静态函数:从一个plist文件中加载词典内容,但此函数是多线程安全的,另外此函数创建的词典需要手动release。
static CCDictionary* createWithContentsOfFileThreadSafe(const char *pFileName);
//将CCObject实例指针与对应的字符串名称存入哈希表。
void setObjectUnSafe(CCObject* pObject, const std::string& key);
//将CCObject实例指针与对应的索引值存入哈希表。
void setObjectUnSafe(CCObject* pObject, const int key);
//词汇的哈希表头部结构指针。
CCDictElement* m_pE
//词典查询类型。
enum CCDictType
kCCDictUnknown = 0,
kCCDictStr,//字符串名称
kCCDictInt //索引
CCDictType m_eDictT
//当前词典查询类型。一个词典实例要求只有一种固定词典查询类型。
CCDictType m_eOldDictT
//上次词典查询类型。这个变量是用来比对是否改变了词典查询类型。
再看CCDictionary.cpp:
#include &CCDictionary.h&
#include &CCString.h&
#include &CCInteger.h&
//使用Cocos2d命名空间
NS_CC_BEGIN
//构造函数
CCDictionary::CCDictionary()
: m_pElements(NULL)
, m_eDictType(kCCDictUnknown)
, m_eOldDictType(kCCDictUnknown)
//析构函数。
CCDictionary::~CCDictionary()
//请空词汇,释放所有词汇占用的内存。
removeAllObjects();
//取得词典中的所有词汇数量。
unsigned int CCDictionary::count()
//通过HASH_CONT宏来取得哈希表的元素数量。
return HASH_COUNT(m_pElements);
//返回所有的查询关键字。
CCArray* CCDictionary::allKeys()
//取得词汇的数量
int iKeyCount = this-&count();
if (iKeyCount &= 0) return NULL;
//创建一个iKeyCount大小的CCArray
CCArray* pArray = CCArray::createWithCapacity(iKeyCount);
//定义临时词汇指针变量。
CCDictElement *pElement, *
if (m_eDictType == kCCDictStr)
{ //如果当前词典查询类型是通过名称字符串。
//遍历所有词汇。
HASH_ITER(hh, m_pElements, pElement, tmp)
//取得每一个词汇的名称字符串放入CCArray中。
CCString* pOneKey = new CCString(pElement-&m_szKey);
pOneKey-&autorelease();
pArray-&addObject(pOneKey);
else if (m_eDictType == kCCDictInt)
{ //如果当前词典查询类型是通过索引。
//遍历所有词汇。
HASH_ITER(hh, m_pElements, pElement, tmp)
//取得每一个词汇的名称字符串放入CCArray中。
CCInteger* pOneKey = new CCInteger(pElement-&m_iKey);
pOneKey-&autorelease();
pArray-&addObject(pOneKey);
//取得对应CCObject指针的所有关键字或索引值。
CCArray* CCDictionary::allKeysForObject(CCObject* object)
//取得词汇的数量
int iKeyCount = this-&count();
if (iKeyCount &= 0) return NULL;
//创建一个CCArray。
CCArray* pArray = CCArray::create();
//定义临时词汇指针变量。
CCDictElement *pElement, *
if (m_eDictType == kCCDictStr)
{ //如果当前词典查询类型是通过名称字符串。
//遍历所有词汇。
HASH_ITER(hh, m_pElements, pElement, tmp)
if (object == pElement-&m_pObject)
//如果与指定的词汇相同,将其名称字符串放入CCArray中。
CCString* pOneKey = new CCString(pElement-&m_szKey);
pArray-&addObject(pOneKey);
pOneKey-&release();
else if (m_eDictType == kCCDictInt)
{ //如果当前词典查询类型是通过索引。
//遍历所有词汇。
HASH_ITER(hh, m_pElements, pElement, tmp)
//如果与指定的词汇相同,将其名称字符串放入CCArray中。
if (object == pElement-&m_pObject)
CCInteger* pOneKey = new CCInteger(pElement-&m_iKey);
pArray-&addObject(pOneKey);
pOneKey-&release();
//通过查询关键字取得对应CCObject指针
CCObject* CCDictionary::objectForKey(const std::string& key)
//当前词典查询类型值有效性判断。此处有错,应该改为:if (m_eDictType == kCCDictUnknown || m_eDictType == kCCDictInt) return NULL;
if (m_eDictType == kCCDictUnknown && m_eDictType == kCCDictUnknown) return NULL;
//要求当前词典查询类型为按字符串查询。
CCAssert(m_eDictType == kCCDictStr, &this dictionary does not use string as key.&);
//定义临时词汇指针变量。
CCObject* pRetObject = NULL;
CCDictElement *pElement = NULL;
//通过名称字符串查询哈希表中的相应词汇
HASH_FIND_STR(m_pElements, key.c_str(), pElement);
if (pElement != NULL)
//如果查询到词汇,返回其对应的CCObject指针
pRetObject = pElement-&m_pO
return pRetO
//通过查询索引取得对应CCObject指针
CCObject* CCDictionary::objectForKey(int key)
//当前词典查询类型值有效性判。此处有错,应该改为:if (m_eDictType == kCCDictUnknown || m_eDictType == kCCDictStr) return NULL;
if (m_eDictType == kCCDictUnknown && m_eDictType == kCCDictUnknown) return NULL;
//要求当前词典查询类型为按字符串查询。
CCAssert(m_eDictType == kCCDictInt, &this dictionary does not use integer as key.&);
//定义临时词汇指针变量。
CCObject* pRetObject = NULL;
CCDictElement *pElement = NULL;
//通过索引查询哈希表中的相应词汇
HASH_FIND_INT(m_pElements, &key, pElement);
if (pElement != NULL)
//如果查询到词汇,返回其对应的CCObject指针
pRetObject = pElement-&m_pO
return pRetO
//通过查询关键字取得对应CCString指针,其实即要求存入词汇的CCObject指针是CCString实例对象指针。
const CCString* CCDictionary::valueForKey(const std::string& key)
//将通过查询关键字取得对应CCString指针强转为CCString指针。
CCString* pStr = (CCString*)objectForKey(key);
if (pStr == NULL)
//如果没找到,返回空字符串
pStr = CCString::create(&&);
//通过查询索引取得对应CCString指针,即要求存入词汇的CCObject指针是CCString实例对象指针。
const CCString* CCDictionary::valueForKey(int key)
//将通过查询索引取得对应CCString指针强转为CCString指针。
CCString* pStr = (CCString*)objectForKey(key);
if (pStr == NULL)
//如果没找到,返回空字符串
pStr = CCString::create(&&);
//设置一个CCObject和对应的名称存入词典。
void CCDictionary::setObject(CCObject* pObject, const std::string& key)
//参数有效性判断
CCAssert(key.length() & 0 && pObject != NULL, &Invalid Argument!&);
//如果是第一次存入,记录查询类型为字符串类型。
if (m_eOldDictType == kCCDictUnknown)
m_eOldDictType = kCCDictS
//将当前词典查询类型设为字符串查询类型。这个变量是可以省略的,因为要求词典查询类型为固定。只用m_eOldDictType就可以了。
m_eDictType = kCCDictS
CCAssert(m_eDictType == m_eOldDictType, &this dictionary does not use string as key.&);
//定义临时指针变量从词典中取得对应名称的词汇。
CCDictElement *pElement = NULL;
HASH_FIND_STR(m_pElements, key.c_str(), pElement);
if (pElement == NULL)
//如果词典中没有此词汇,将此新词汇放入词典。
setObjectUnSafe(pObject, key);
else if (pElement-&m_pObject != pObject)
//如果词典中已有此词汇,则删除老词汇放入新词汇。
CCObject* pTmpObj = pElement-&m_pO
//此处调用retain对引用计数器加1可以避免在后面的删除函数中释放pTmpObj指向的CCObject。
pTmpObj-&retain();
//删除此词汇
removeObjectForElememt(pElement);
//放入新词汇。
setObjectUnSafe(pObject, key);
//因为之前retain对引用计数器加1一次,所以必须release对引用计数器减1一次才能保证由内存管理器来进行内存释放时,pTempObj指向的CCObject可以正确的被释放掉。
pTmpObj-&release();
//设置一个CCObject和对应的哈希索引存入词典。
void CCDictionary::setObject(CCObject* pObject, int key)
//参数有效性判断
CCAssert(pObject != NULL, &Invalid Argument!&);
//如果是第一次存入,记录查询类型为索引类型。
if (m_eOldDictType == kCCDictUnknown)
m_eOldDictType = kCCDictI
//将当前词典查询类型设为索引查询类型。这个变量是可以省略的,因为要求词典查询类型为固定。只用m_eOldDictType就可以了。
m_eDictType = kCCDictI
//一致性判断
CCAssert(m_eDictType == m_eOldDictType, &this dictionary does not use integer as key.&);
//定义临时指针变量从词典中取得对应名称的词汇。
CCDictElement *pElement = NULL;
HASH_FIND_INT(m_pElements, &key, pElement);
if (pElement == NULL)
//如果词典中没有此词汇,将此新词汇放入词典。
setObjectUnSafe(pObject, key);
else if (pElement-&m_pObject != pObject)
//如果词典中已有此词汇,则删除老词汇放入新词汇。
CCObject* pTmpObj = pElement-&m_pO
//此处调用retain对引用计数器加1可以避免在后面的删除函数中释放pTmpObj指向的CCObject。
pTmpObj-&retain();
//删除此词汇
removeObjectForElememt(pElement);
//放入新词汇。
setObjectUnSafe(pObject, key);
//因为之前retain对引用计数器加1一次,所以必须release对引用计数器减1一次才能保证由内存管理器来进行内存释放时,pTempObj指向的CCObject可以正确的被释放掉。
pTmpObj-&release();
//按照查询关键字找到对应CCObject并删除。
void CCDictionary::removeObjectForKey(const std::string& key)
//当前词典是否有效
if (m_eOldDictType == kCCDictUnknown)
//当前词典的查询类型是否为字符串名称查询方式
CCAssert(m_eDictType == kCCDictStr, &this dictionary does not use string as its key&);
//参数有效性判断
CCAssert(key.length() & 0, &Invalid Argument!&);
//定义临时指针变量从词典中取得对应名称的词汇。
CCDictElement *pElement = NULL;
HASH_FIND_STR(m_pElements, key.c_str(), pElement);
//从词典中删除相应的词汇。
removeObjectForElememt(pElement);
void CCDictionary::removeObjectForKey(int key)
//当前词典是否有效
if (m_eOldDictType == kCCDictUnknown)
//当前词典的查询类型是否为索引查询方式
CCAssert(m_eDictType == kCCDictInt, &this dictionary does not use integer as its key&);
//定义临时指针变量从词典中取得对应索引的词汇。
CCDictElement *pElement = NULL;
HASH_FIND_INT(m_pElements, &key, pElement);
//从词典中删除相应的词汇。
removeObjectForElememt(pElement);
//将CCObject实例指针与对应的字符串名称存入哈希表。
void CCDictionary::setObjectUnSafe(CCObject* pObject, const std::string& key)
//对pObject指向的实例对像引用计数器加1,即告诉其被词典使用.避免万一其的其它使用者都不再使用时被内存管理器释放.
pObject-&retain();
//由pObject和名称字符串产生一个新的词汇。
CCDictElement* pElement = new CCDictElement(key.c_str(), pObject);
//将新的词汇放入哈希表中。
HASH_ADD_STR(m_pElements, m_szKey, pElement);
//将CCObject实例指针与对应的索引存入哈希表。
void CCDictionary::setObjectUnSafe(CCObject* pObject, const int key)
//对pObject指向的实例对像引用计数器加1,即告诉其被词典使用.避免万一其的其它使用者都不再使用时被内存管理器释放.
pObject-&retain();
//由pObject和名称字符串产生一个新的词汇。
CCDictElement* pElement = new CCDictElement(key, pObject);
//将新的词汇放入哈希表中。
HASH_ADD_INT(m_pElements, m_iKey, pElement);
//按照容器中的查询关键字找到对应CCObject并删除。
void CCDictionary::removeObjectsForKeys(CCArray* pKeyArray)
//遍历CCArray实例对像的所有名称字符串,查询与之对应的词汇。并删除。
CCObject* pObj = NULL;
CCARRAY_FOREACH(pKeyArray, pObj)
CCString* pStr = (CCString*)pO
removeObjectForKey(pStr-&getCString());
//从词典中删除相应的词汇。
void CCDictionary::removeObjectForElememt(CCDictElement* pElement)
//参数有效性判断
if (pElement != NULL)
//从哈希表中删除pElement指向的词汇
HASH_DEL(m_pElements, pElement);
//前面在将词汇加入词典时对引用计数器加1,这里删除词汇是就应该对引用计数器减1。
pElement-&m_pObject-&release();
//释放词汇
CC_SAFE_DELETE(pElement);
//从词典中清空所有的词汇。
void CCDictionary::removeAllObjects()
//定义遍历哈希表所用的指针变量
CCDictElement *pElement, *
//遍历哈希表
HASH_ITER(hh, m_pElements, pElement, tmp)
//删除词汇并释放
HASH_DEL(m_pElements, pElement);
pElement-&m_pObject-&release();
CC_SAFE_DELETE(pElement);
//重载CCObject的拷贝函数。产生一个一模一样的词典。
CCObject* CCDictionary::copyWithZone(CCZone* pZone)
//参数有效性判断
CCAssert(pZone == NULL, &CCDirctionary should not be inherited.&);
//创建一个新的词典
CCDictionary* pNewDict = new CCDictionary();
//定义用来遍历的临时变量
CCDictElement* pElement = NULL;
CCObject* pTmpObj = NULL;
//如果是索引查询方式
if (m_eDictType == kCCDictInt)
//遍历所有词汇
CCDICT_FOREACH(this, pElement)
//产生遍历词汇对应的CCObject的COPY,生成新的词汇放入新的词典中.
pTmpObj = pElement-&getObject()-&copy();
pNewDict-&setObject(pTmpObj, pElement-&getIntKey());
pTmpObj-&release();
else if (m_eDictType == kCCDictStr)
//如果是名称字符串查询方式.
//遍历所有词汇
CCDICT_FOREACH(this, pElement)
//产生遍历词汇对应的CCObject的COPY,生成新的词汇放入新的词典中.
pTmpObj = pElement-&getObject()-&copy();
pNewDict-&setObject(pTmpObj, pElement-&getStrKey());
pTmpObj-&release();
return pNewD
//静态函数,取得单例的词典,内部调用create函数。
CCDictionary* CCDictionary::dictionary()
return CCDictionary::create();
//静态函数,取得单例的词典。
CCDictionary* CCDictionary::create()
//创建一个新的词典
CCDictionary* pRet = new CCDictionary();
if (pRet != NULL)
//将其设为由引用计数器来判断释放时机.交由内存管理器进行管理.
pRet-&autorelease();
//返回新创建的词典指针
//静态函数,取得一个指定词典的COPY,内部调用createWithDictionary函数.
CCDictionary* CCDictionary::dictionaryWithDictionary(CCDictionary* srcDict)
return CCDictionary::createWithDictionary(srcDict);
//静态函数,取得一个指定词典的COPY.
CCDictionary* CCDictionary::createWithDictionary(CCDictionary* srcDict)
//查生一个指定词典的COPY.
CCDictionary* pNewDict = (CCDictionary*)srcDict-&copy();
pNewDict-&autorelease();
return pNewD
//声明静态函数:从一个plist文件中加载词典内容,此函数是多线程安全的,其内部调用 createWithContentsOfFileThreadSafe函数。
extern CCDictionary* ccFileUtils_dictionaryWithContentsOfFileThreadSafe(const char *pFileName);
//静态函数:从一个plist文件中加载词典内容,此函数是多线程安全的.
CCDictionary* CCDictionary::dictionaryWithContentsOfFileThreadSafe(const char *pFileName)
return CCDictionary::createWithContentsOfFileThreadSafe(pFileName);
//静态函数:从一个plist文件中加载词典内容,此函数是多线程安全的.
CCDictionary* CCDictionary::createWithContentsOfFileThreadSafe(const char *pFileName)
//这里调用Cocos2d-x的文件函数集中的带多线程安全的从plist文件加载词典函数实现相应功能.
return ccFileUtils_dictionaryWithContentsOfFileThreadSafe(pFileName);
//静态函数:从一个plist文件中加载词典内容,其内部调用 createWithContentsOfFile函数。
CCDictionary* CCDictionary::dictionaryWithContentsOfFile(const char *pFileName)
return CCDictionary::createWithContentsOfFile(pFileName);
//静态函数:从一个plist文件中加载词典内容.
CCDictionary* CCDictionary::createWithContentsOfFile(const char *pFileName)
CCDictionary* pRet = createWithContentsOfFileThreadSafe(pFileName);
pRet-&autorelease();
& & & & &Cocos2d-x的词典类讲完了,相信大家已经大致了解了本词典的功能和用法。最后希望大家在领悟了它的意义后在各自的工作中设计出更高效的词典类。相信我,做游戏的太多地方会遇到类似的需求了。
& & & & &最后,我想说,本博的内容比较唠叨,主要还是希望大家能够体会到本博的努力。另外本人目前阶段对于Cocos2d-x也属于学习阶段,暂时主要做代码分析,等到一阶段了才会进行项目实战的讲解,所以,希望各位理解。
原文链接:
共有0个评论
更多开发者职位上
有什么技术问题吗?
长平狐的其它问题
类似的话题

我要回帖

 

随机推荐