zoukankan      html  css  js  c++  java
  • Object C学习笔记13-Dictionary字典

    Object C学习笔记13-Dictionary字典

    2014-03-09 22:07 by 贺臣, 325 阅读, 1 评论, 收藏, 编辑

      通过Array数组和Set集合的学习和理解,可以想象得到Dictionary也分为两种情况了,那就是可变和不可变两种类型的。的确如此,在Object C中提供了两个字典类,分别为NSDictionary 和 NSMutableDictionary. 在.NET中我们也学习过Dictionary类,这个集合的存储方式是键值对的方式存储的。而且使用Dictionary查找元素也极为简单。

      一 NSDictionary 不可变字典

        (1) 初始化字典

    复制代码
    NSDictionary *dic=[NSDictionary dictionaryWithObject:@"hechen" forKey:@"name"];
            NSDictionary *dic1=[NSDictionary dictionaryWithObjectsAndKeys:@"hechen",@"name",@"25",@"age", nil];
            NSDictionary *dic2=[[NSDictionary alloc] init];
            
            NSLog(@"%d",[dic count]);
            NSLog(@"%d",[dic1 count]);
            NSLog(@"%d",[dic2 count]);
            
    复制代码

        上面列举了三种方式来初始化字典对象:

        1. [[NSDictionary alloc] init] 方法最为常见了,先给NSDictionary分配空间再初始化,这也是大众的方式;

        2. 使用dictionaryWithObject forkey 该方法在初始化的时候提供了两个参数,第一个为存储的值,第二个为key,这个和我们平时在.NET中有点不一样的,这里的key是放在后面的。

        3. 使用dictionaryWithObjectsAndKeys 这个方法同样用于初始化NSDictionary,这里可以传入多个值,奇数为value值,偶数为key值,但是必须以nil形式结尾。这个和之前的NSArray,NSSet一致,标识集合的结束。

        (2)获得NSDictionary的长度

        NSDictionary的长度使用方法count方法来获得,这个和大多数集合一样

    复制代码
    NSDictionary *dic=[NSDictionary dictionaryWithObject:@"hechen" forKey:@"name"];
            NSDictionary *dic1=[NSDictionary dictionaryWithObjectsAndKeys:@"hechen",@"name",@"25",@"age", nil];
            NSDictionary *dic2=[[NSDictionary alloc] init];
            
            NSLog(@"%d",[dic count]);
            NSLog(@"%d",[dic1 count]);
            NSLog(@"%d",[dic2 count]);
            
    复制代码

        以上代码中获得了三个NSDictionary的长度,分别输出的结果为1,2,0;这里也刚好说明了上面三种方式初始化的不同之处。

        (3)获得NSDictionary中Keys的迭代

    复制代码
    NSEnumerator *enumer=[dic1 keyEnumerator];
            NSString *key2=[enumer nextObject];
            while(key2!=nil){
                NSLog(@"输出Key=%@",key2);
                key2=[enumer nextObject];
            }
    复制代码

        以上代码可以看得出来使用keyEnumerator 方法获取NSDictionary Key的集合迭代,然后使用迭代器遍历输出所有的元素。

        (4)获取NSDictionary中的Values的迭代

    NSEnumerator *enumerObject=[dic1 objectEnumerator];
            for(NSObject *object in enumerObject){
                NSLog(@"输出Value = %@",object);
            }

        获取Value的方法和获取key的方法基本类似,这里在循环遍历的时候有些不同,但是两者的结果是一样的,可以稍微注意一下

        (5)根据Key获取Value

    NSString *va=[dic1 objectForKey:@"name"];
            NSLog(@"objectForKey = %@",va);

        在Object C通过key获取Value要使用方法objectForKey,在上面的案例中已经简单而且明确的展示了其用法。

      二. NSMutableDictionary 动态字典

        NSMutableDictionary 是NSDictionary的子类,继承了其所有的方法和属性。但是和NSDictionary有着一定的区别就是NSMutableDictionary可以动态的修改和增加删除里面的元素。

        (1) dictionaryWithCapacity方法设置其初始容量

    NSMutableDictionary *muDic1=[NSMutableDictionary dictionaryWithCapacity:10];

        上面的代码中初始化了一个NSMutableDictionary对象,并且设置其初始容量为10; 和NSMutableArray,NSMutableSet一样,当存储的元素达到最大容量之后会自动扩充容量,所以不用担心数组越界。

        (2) 往NSMutableDictionary中添加元素

    复制代码
    [muDic1 setObject:@"中国" forKey:@"name"];
            [muDic1 setObject:@"area" forKey:@"add"];
            NSEnumerator *enumerKeys=[muDic1 keyEnumerator];
            for(NSString *key in enumerKeys){
                NSString *value=[muDic1 objectForKey:key];
                NSLog(@"输出的值 = %@",value);
            }
    复制代码

        从以上代码可以看到使用 setObject forKey 方法可以往字典中添加元素, 方法的前一个参数为value,后一个参数为key。使用循环可以得到相应的值。

        (3) 删除字典中的元素

    [muDic1 removeObjectForKey:@"add"];
            for(NSString *key in [muDic1 keyEnumerator]){
                NSLog(@"-----%@",[muDic1 objectForKey:key]);
            }

        以上代码是根据一个key值来删除NSMutableDictionary中的元素,所使用的方法为removeObjectForKey,在NSMutableDictionary中还提供了根据多个key值删除的元素的方法。

        - (void)removeObjectsForKeys:(NSArray *)keyArray;这个方法参数为一个数组,用于删除数组中包含的key的所有元素。

    复制代码
    [muDic1 removeObjectsForKeys:[NSArray arrayWithObjects:@"ab", nil]];
    
    [muDic1 removeAllObjects];
    
    for(NSString *key in [muDic1 keyEnumerator]){
        NSLog(@"*********%@",[muDic1 objectForKey:key]);
    }
    复制代码

        上面第一句代码用于从数组中删除包含的元素,而第二句则用于删除NSMutableDictionary中的所有元素。最终没有任何结果输出。

        以上是关于字典的相关内容的简单介绍,系统提供的方法远不止这些,仍需要不断的去努力与实践,实践永远是最有效的方法。

        有人问我这学习Object C是要搞iphone开发的节奏啊,其实不是为了开发iPhone才学习Object C的,只是为了让自己还能静下心来去学习,好在实施过程中给客户交流还有扯淡的资本!

    转载于:http://www.cnblogs.com/qingyuan/p/3590094.html

  • 相关阅读:
    .NET Core WEB API使用Swagger生成在线接口文档
    .NET Core WEB API中接口参数的模型绑定的理解
    .Net Core使用视图组件(ViewComponent)封装表单文本框控件
    在有主分支和个人分支情况下的TFS使用方法
    SQL Server Profiler (SQl跟踪器)的简单使用
    C# 多线程下的单例模式
    C# 单例模式
    .net core MVC接受来自自前端的GET和POST请求方法的区别
    《Windows Phone 8 Development Internals》读书笔记-1-2-2-连载
    《Windows Phone 8 Development Internals》读书笔记-1-2-1-连载
  • 原文地址:https://www.cnblogs.com/wodehao0808/p/3592131.html
Copyright © 2011-2022 走看看