黑马软件工程师——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--博客