柳志超博客 ? Program ? Objective-C ? Objective-C入门教程13:词典对象(NSDictionary和NSMutableDictionary)
posted in Objective-C on by liuzc词典(dictionary)顾名思义就是同由键-值组成的数据集合.与在词典中查找单词定义一样,可以通过对象的键从词典中获取需要的对象,看到这里,你是不是想起了java中的map?和NSArray一样,一个词典对象也能保存不同类型的值,词典也分别有不可变词典和可变的词典(NSDictionary与NSMutableDictionary),前者是线程安全的,后者不是 。
[NSDictionary dictionaryWithObjectsAndKeys:..] : 使用键值对创建词典对象,结尾必需使用nil标志结束。
[dictionary count]: 得到词典的键值对数量。
[dictionary keyEnumerator]: 将词典的所有key储存在NSEnumerator中,类似于Java语言中的迭代器
[dictionary objectEnumerator]: 将词典的所有value储存在NSEnumerator中
[dictionary objectForKey:key]: 通过传入key对象可以拿到当前key对应储存的值。
int main(int argc, const char * argv[]){ @autoreleasepool { NSDictionary* aboutme = [NSDictionary dictionaryWithObjectsAndKeys:@"Liuzhichao",@"name",@"24",@"age", nil]; //得到词典的键值对数量 NSLog(@"%lu", [aboutme count]); //将词典的所有key储存在NSEnumerator中 NSEnumerator *enumeratorKey = [aboutme keyEnumerator]; for (NSObject *object in enumeratorKey) { NSLog(@"key:%@", object); } //将词典的所有value储存在NSEnumerator中 NSEnumerator *enumeratorObject = [aboutme objectEnumerator]; for (NSObject *object in enumeratorObject) { NSLog(@"value:%@", object); } //打印词典中所有的键值对 for(NSString *key in aboutme){ NSLog(@"%@ : %@",key,[aboutme objectForKey:key]); } //通过传入key对象可以拿到当前key对应储存的值 NSLog(@"key name的值是:%@", [aboutme objectForKey:@"name"]); } return 0;}
NSMutableDictionary是NSDictionary的子类,所以它继承了NSDictionary类的方法.
+(id)dictionaryWithCapacity:size 创建一个size大小的可变字典
-(id)initWithCapacity:size 初始化一个size 大小的可变字典
-(void)removeAllObjects 删除字典中所有元素
-(void)removeObjectForKey:key 删除字典中key位置的元素
-(void)setObject:obj forKey:key 添加 (key , obj)到字典中去;若key已经存在,则替换值为 obj
int main(int argc, const char * argv[]){ @autoreleasepool { // 创建动态字典,初始化长度为5 NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionaryWithCapacity:5]; // 向字典中添加数据 [mutableDictionary setObject:@"obj1" forKey:@"key1"]; [mutableDictionary setObject:@"obj2" forKey:@"key2"]; [mutableDictionary setObject:@"obj3" forKey:@"key3"]; [mutableDictionary setObject:@"obj4" forKey:@"key4"]; [mutableDictionary setObject:@"obj5" forKey:@"key5"]; // 删除单个元素 [mutableDictionary removeObjectForKey:@"key4"]; // 增加一个元素,key3已经存在,会修改key3对应的值 [mutableDictionary setObject:@"obj33333" forKey:@"key3"]; // 打印可变字典中所有key NSLog(@"all keys: %@", [mutableDictionary allKeys]); // 打印可变字典中所有value NSLog(@"all values: %@", [mutableDictionary allValues]); } return 0;}
和数组不一样,词典对象是无序的,所以,当枚举词典时,第一个放到词典中的键-对象并不一定会第一个取出.
联系客服