黑马软件工程师——Foundation框架常用类(NSDictionary/NSMutableDictionary)
黑马程序员——Foundation框架常用类(NSDictionary/NSMutableDictionary)
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------NSArray/NSMutableArray
简介
字典就是关键字及其定义(描述)的集合。Cocoa中的实现字典的集合NSDictionary在给定的关键字(通常是一个NSString)下存储一个数值(可以是任何类型的对象)。然后你就可以用这个关键字来查找相应的数值。不同于数组的是,字典(也被称为散列表或关联数组)使用的是键查询的优化存储方式。它可以立即找出要查询的数据,而不需要遍历整个数组进行查找。
注意:添加的关键字(keys)是唯一的。。
NSDictionary/NSMutableDictionary
1.字典的创建
//第一种创建方式 NSDictionary *dic1 = [NSDictionary dictionaryWithObjectsAndKeys:@"one",@"1",@"tow",@"2", nil]; //第二种创建方法(快捷创建) NSDictionary *dic2 = @{@"one":@"1",@"tow":@"2"}; //第三种创建方式(存储任意类型) NSDictionary *dic3 = @{@"string":@"Is String",@"number":@1,@"dictionary":dic1}; //第四种创建方式(利用两个数组创建) NSArray *objs = @[@"one",@"tow"]; NSArray *keys = @[@"1",@"2"]; NSDictionary *dic4 = [NSDictionary dictionaryWithObjects:objs forKeys:keys]; //第五种创建方式 NSDictionary *dic5 = [NSDictionary dictionaryWithDictionary:dic4]; //第六种创建方式(NSMutableDictionary特有的) NSMutableDictionary *dic6 = [[NSMutableDictionary alloc]init]; [dic6 setValue:dic2 forKey:@"dic2"]; //读取文件。。。。等等
2.字典的基本使用
/*****************NSMutableDictionary*****************/ NSMutableDictionary *mdic = [[NSMutableDictionary alloc]init]; //添加键值对(key值唯一,不唯一时候,相当于修改key的value) [mdic setObject:@"Zhangsan" forKey:@"name"]; [mdic setObject:@22 forKey:@"age"]; [mdic setObject:@100 forKey:@"score"]; //修改键值对 [mdic setObject:@"Lisi" forKey:@"name"]; //删除键值对 [mdic removeObjectForKey:@"score"]; //获取键值对的数目 NSUInteger count = [mdic count]; //根据key获取值(value) NSNumber *age = mdic[@"age"];
3.字典的遍历
NSDictionary *dic = @{@"name" :@"zhangsan", @"sex " :@"男", @"年龄 " :@20 }; //第一种:普通遍历 NSLog(@"********第一种遍历方式**********"); NSArray *keys = [dic allKeys]; for (int i = 0; i < dic.count; i++) { NSLog(@"%@ :%@",keys[i],dic[keys[i]]); } //第二种:block遍历 NSLog(@"********第二种遍历方式**********"); [dic enumerateKeysAndObjectsUsingBlock: ^(id key, id obj, BOOL *stop) { NSLog(@"%@ :%@",key,obj); } ]; //第三种:快速遍历 NSLog(@"********第三种遍历方式**********"); for (id key in dic) { NSLog(@"%@ :%@",key,dic[key]); } //第四种:枚举遍历 NSLog(@"********第四种遍历方式**********"); NSEnumerator *enu = [dic keyEnumerator]; id key = enu.nextObject; while (key) { NSLog(@"%@ :%@",key,dic[key]); key = enu.nextObject; }
4.实例
实例示范:#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSDictionary *temp_dic = @{@"name" :@"zhangsan", @"sex " :@"男", @"年龄 " :@20 }; //利用不可变键值对创建可变键值对 NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithDictionary:temp_dic]; //添加键值对 [dic setValue:@80 forKey:@"score"]; //修改键值对(键值对已经存在,起修改作用,键值对不存在,起添加作用) [dic setValue:@88 forKey:@"score"]; //删除键值对 [dic removeObjectForKey:@"sex "]; //block遍历 NSLog(@"********第二种遍历方式**********"); [dic enumerateKeysAndObjectsUsingBlock: ^(id key, id obj, BOOL *stop) { NSLog(@"%@ :%@",key,obj); } ]; } return 0; }结果输出:
2015-05-10 17:51:14.433 09-NSDictionary的基本使用[2533:88782] ********block遍历********** 2015-05-10 17:51:14.434 09-NSDictionary的基本使用[2533:88782] score :88 2015-05-10 17:51:14.434 09-NSDictionary的基本使用[2533:88782] name :zhangsan 2015-05-10 17:51:14.434 09-NSDictionary的基本使用[2533:88782] 年龄 :20
小结:
由实例结果输出可以看出,键值对存放并没有顺序可言。。。
参考文献:
英怀博客园--博客
收破烂的CSDN--博客