词典是由键—对象组成的数据的集合,可通过对象的键从词典中获取相应的对象。词典中的键必须是单值,通常是字符串对象,但也可以是其他对象的类型。和键关联的值可以是任何对象类型,但不能是uil。词典也分为可变的和不可变的两种,可变的词典可以添加和删除,可以使用键检索词典的内容,也可以使用快速枚举方法词典的内容。下面的代码介绍了可变词典:
#import <Foundation/Foundation.h>
int main ()
{
@autoreleasepool {
NSMutableDictionary *glossary = [NSMutableDictionarydictionary];
//存储三个条目在字典中
[glossary setObject:@"A class defined so other classes can inherit from it"forKey:@"abstract class"];
[glossary setObject:@"To implement all the methords defined in a protocol"forKey:@"adopt"];
[glossary setObject:@"Storing an object for later use"forKey:@"archiving"];
//检索并显示他们
NSLog(@"abstract class:%@",[glossaryobjectForKey:@"abstract class"]);
NSLog(@"adopt:%@",[glossaryobjectForKey:@"adopt"]);
NSLog(@"archiving:%@",[glossaryobjectForKey:@"archiving"]);
}
return 0;
}
运行结果为:2014-08-29 15:26:50.803 testOC[937:303] abstract class:A class defined so other classes can inherit from it
2014-08-29 15:26:50.804 testOC[937:303] adopt:To implement all the methords defined in a protocol
2014-08-29 15:26:50.805 testOC[937:303] archiving:Storing an object for later use
Program ended with exit code: 0
其中,使用表达式 [NSMutableDictionary dictionary]
创建一个空的可变的词典,使用setObject: forKey:方法将键—值添加到词典中,生成词典之后使用objectForKey:方法检索键的值。
枚举词典
现在有如下代码:
#import <Foundation/Foundation.h>
int main ()
{
@autoreleasepool {
NSDictionary *glossary = [NSDictionarydictionaryWithObjectsAndKeys:
@"A class defined so other classes can inherit from it" ,
@"abstract class",
@"To implement all the methords defined in a protocol",
@"adopt",
@"Storing an object for later use" ,
@"archiving",
nil];
for ( NSString *keyin glossary) {
NSLog(@"%@ : %@",key, [glossaryobjectForKey: key]);
}
}
return 0;
}
运行结果为:2014-08-29 15:53:57.654 testOC[1014:303] adopt : To implement all the methords defined in a protocol
2014-08-29 15:53:57.656 testOC[1014:303] archiving : Storing an object for later use
2014-08-29 15:53:57.656 testOC[1014:303] abstract class : A class defined so other classes can inherit from it
Program ended with exit code: 0
这里需要注意,使用dictionaryWithObjectsAndKeys:方法创建一个一个带有初始键—值对的词典,这样就创建一个不可变词典。和数组不一样,词典对象是没有顺序的。所以,当枚举词典时,第一个放到词典中的键—对象并不一定是第一个取出的。如果需要以字母顺序显示词典中得内容 ,可以先取出词典中的所有键对他们进行排序,然后按照排好序的键从词典中取出所有的值。使用NSDictionary中的allkeys方法从词典中取出所有的键组成一个数组并进行排序,然后,枚举排序过的键组成的数组,从字典中获取相应的值。
假如现在有一个名为states的词典,它包含美国每个州的名称,把对应的州政府所在地作为值,下面是一个按照字母顺序显示每个洲的名称以及相应的州政府所在地的代码片段:
NSArray *keys = [states allKeys] ;
keys = [keys sortedArrayUsingComparator:
^(id obj1, id obj2){
return obj1 compare: obj2;
}];
for (NSString *aState in keys)
{
NSLog(@"State: %@ Captial: %@",aState,[states objectForKey: aState]);
}
因为NSMutableDictionary类是NSDictionary类的子类,所以它继承了NSDictionary类的方法。
常用的NSDictionary的方法
常用的NSMutableDictionary方法
以上表中key,key1,key2,obj,obj1,obj2,是任意对象,size是一个NSUIteger无符号整数。