1 NSDictionary 和 NSMutableDictionary

NSDictionary  :就是java中的map; 放入对象是键值对 key-value  , 同样 秉持了一样的原则,只能放入对象,不可本体增删改;

(1)初始化方法

  • + dictionaryWithObject:forKey:
  • + dictionaryWithObjects:forKeys:
  • + dictionaryWithObjectsAndKeys:

这三个是最常用的吧,注意是对象在前,key在后

2 访问 key和value

Accessing Keys and Values

  • – allKeys
  • – allKeysForObject:
  • – allValues
  • – objectForKey:

allKeys返回所有的key,  allValues返回所有的value

  • – allKeysForObject:
  • NSDictionary *dic2 = [NSDictionary dictionaryWithObjectsAndKeys:@"man1",@"11",@"wom",@"22",@"kid",@"33",@"man1",@"44",nil];
    NSArray *array = [dic2 allKeysForObject:@"man1"];
    NSLog(@"%@",array);

    由上代码可知,allKeysForObject是返回指定对象中所有这个和这个对象配对的key(一个字典或者是java中的map key是唯一的 可是value却不是).

    3 枚举字典

    Enumerating Dictionaries

    • – keyEnumerator
    • – objectEnumerator
    • – enumerateKeysAndObjectsUsingBlock:
    • enumerateKeysAndObjectsWithOptions:usingBlock:

      以上几种的方法主要都是获取这个字典里的值,相当于for吧 不过比for效率高,毕竟官方封装的方法

    NSDictionary *nsd = [NSDictionary dictionaryWithObjectsAndKeys:@"萌妹子",@"1",@"御姐",@"2",@"女汉子",@"3", nil];
    [nsd enumerateKeysAndObjectsWithOptions:NSEnumerationReverse usingBlock:^(id key, id obj, BOOL *stop) {
    NSLog(@"%@ - %@" ,key,obj);
    }];
    NSEnumerator *en = [nsd keyEnumerator];
    id string;
    while (string = [en nextObject]) {
    NSLog(@"%@-%@",string,[nsd objectForKey:string]);
    }

    先说 – keyEnumerator – objectEnumerator 这是获取字典中的全部的key 或者 object 注意他们是  NSEnumerator 类型的

    这个类型只有一个方法 nextObject 它我觉得就是把对象按链表的方式存起来 让你一个个读.

    • – enumerateKeysAndObjectsUsingBlock:
    • enumerateKeysAndObjectsWithOptions:usingBlock:

      然后就是这两个 它俩其实一样 只不过第二个比第一个少一个参数

      NSSortOptions 这是个枚举值 ,它的作用是设定取KEY的顺序 (NSSortConcurrent 是正序 ,NSSortStable 反序)

      enum {

      NSSortConcurrent = (1UL << 0),

      NSSortStable = (1UL << 4),

      };

    (这儿有了个疑问,字典存放不是无序的么 怎么还分正反,后来想了想,可能是为了在同一个方法或者这个字典的生命周期里确定吧,

    毕竟这个字典创建后,那些键值对还是按照某个顺序存在的);

    NSMutableDictionary

    同样 这是一个可变的字典 那么它就和java中的map基本相同了

    Creating and Initializing a Mutable Dictionary

    • + dictionaryWithCapacity:
    • – initWithCapacity:
    • + dictionaryWithSharedKeySet:

    Adding Entries to a Mutable Dictionary

    • – setObject:forKey:
    • – setObject:forKeyedSubscript:
    • – setValue:forKey:
    • – addEntriesFromDictionary:
    • – setDictionary:

    Removing Entries From a Mutable Dictionary

    • – removeObjectForKey:
    • – removeAllObjects
    • – removeObjectsForKeys:

    上面的几个方法都没什么好说的,不得不说苹果的命名机制很好,见名知意.

    2  NSSet  和 NSMutableSet

    NSSet 就是一个只能存放唯一值的集合,不知道OC中是在呢么实现的,java是判断hash码,我估计oc也差不多.

    它一样的创建后 无法改变

    • – allObjects
    • – anyObject
    • – containsObject:

    这几个是获取里面的对象的 第一个是获取全部的,第二个是获取一个随机的(说是随机 其实就是第一个,

    不过set是随机存储,那么也可以理解为随机了,可是同一个生命周期内取到的都是同一个值)

    见代码!

      NSSet *set = [NSSet setWithObjects:@"123",@"456",@"789", nil];
    NSArray *ns = [set allObjects];
    id na = [set anyObject];
    BOOL a = [set containsObject:@"123"];
    NSLog(@"%@,%@,%d",ns,na,a);

    输出是2013-08-08 20:45:01.846 NSSetAndNSDic[1886:303] ( 
    123, 
    456, 
    789 
    ),123,1

    想判断是否包含某个对象还有一个方法

    – member:

    NSString *b = [set member:@"456"];
    NSLog(@"%@",b);

    这就是我觉得比较重要的几个 剩下的见名知意

    NSMutableSet

     
    • – unionSet:
    • – minusSet:

    第一个是将两个set融合 ,第二个是删除两个集合中相同的

    NSMutableSet *set = [NSMutableSet setWithObjects:@"123",@"456",@"789", nil];
    NSMutableSet *set2 = [NSMutableSet setWithObjects:@"abc",@"def",@"hij", nil];
    NSMutableSet *set3 = [NSMutableSet setWithObjects:@"hjk",@"789", nil];
    [set unionSet:set2];
    NSLog(@"%@",set);
    [set minusSet:set2];
    NSLog(@"%@",set);
    [set minusSet:set3];
    NSLog(@"%@",set);

    输出:

    2013-08-08 21:00:59.885 NSSetAndNSDic[1920:303] {( 
    123, 
    789, 
    abc, 
    hij, 
    456, 
    def 
    )} 
    2013-08-08 21:00:59.887 NSSetAndNSDic[1920:303] {( 
    123, 
    789, 
    456 
    )} 
    2013-08-08 21:00:59.887 NSSetAndNSDic[1920:303] {( 
    123, 
    456 
    )}

    补充:

    还有一个for in的用法,我觉得就是java中的超强循环 for each 一个样
    只要是 array set Dictionary 都能用
    NSDictionary *nsd2 = [NSDictionary dictionaryWithObjectsAndKeys:@"萌妹子",@"1",@"御姐",@"2",@"女汉子",@"3", nil];
    
            for (id key in nsd2) {
    NSLog(@"%@",[nsd objectForKey:key]);
    }

    没什么好说的,知道有这个简便用法,和for一样

NSDictionary , NSMutableDictionary, NSMutableDictionary 和 NSMutableSet)相当于java的map、set的更多相关文章

  1. 字典NSDictionary以及NSMutableDictionary的用法总结

    做过Java语言 或者 C语言 开发的朋友应该很清楚 关键字map 吧,它可以将数据以键值对儿的形式储存起来,取值的时候通过KEY就可以直接拿到对应的值,非常方便.在Objective-C语言中 词典 ...

  2. 词典对象 NSDictionary与NSMutableDictionary

    做过Java语言或者 C语言开发的朋友应该很清楚关键字map 吧,它可以将数据以键值对儿的形式储存起来,取值的时候通过KEY就可以直接拿到对应的值,非常方便,是一种非常常用的数据结构.在Objecti ...

  3. (转载)目前最细致清晰的NSDictionary以及NSMutableDictionary用法总结

    文章转载自:http://www.cnblogs.com/wengzilin/archive/2012/03/15/2397712.html 做过Java语言 或者 C语言 开发的朋友应该很清楚 关键 ...

  4. 【转】目前最细致清晰的NSDictionary以及NSMutableDictionary用法总结 -- 不错

    原文网址:http://www.cnblogs.com/wengzilin/archive/2012/03/15/2397712.html 做过Java语言 或者 C语言 开发的朋友应该很清楚 关键字 ...

  5. OC中Foundation框架之NSDictionary、NSMutableDictionary

    NSDictionary概述 NSDictionary的作用类似:通过一个key ,就能找到对应的value 同样 NSDictionary是不可变的,一旦初始化完毕,里面的内容就无法修改 NSDic ...

  6. Objective-C语法之NSDictionary和NSMutableDictionary

    Java 有Map,可以把数据以键值对的形式储存起来,取值的时候通过key就可以直接拿到对应的值,方便快捷.在Objective-C语言中,词典就是做这样的事情的,和NSArray一样,一个词典对象也 ...

  7. 词典对象(NSDictionary和NSMutableDictionary)

    词典(dictionary)顾名思义就是同由键-值组成的数据集合.与在词典中查找单词定义一样,可以通过对象的键从词典中获取需要的对象,看到 这里,你是不是想起了java中的map?和NSArray一样 ...

  8. 黑马程序员-NSDictionary和NSMutableDictionary

    NSDictionary和NSMutableDictionary:通过key和value进行对应,进行存储元素,能够方便提取所需的元素.key是不能够重复出现,但是value能够重复出现.NSDict ...

  9. OC第四节——NSDictionary和NSMutableDictionary

    NSDictionary    1.什么是字典        字典是也是一种集合结构,功能与我们现实中的字典工具一样    2.字典的元素是什么        任意类型的对象地址构成键值对    3. ...

随机推荐

  1. xargs -i 和-I 的区别【转】

    xargs与find经常结合来进行文件操作,平时删日志的时候只是习惯的去删除,比如  # find . -type f -name "*.log" | xargs rm -rf * ...

  2. mysql 操作时间戳

    1.将long显示成时间 SELECT FROM_UNIXTIME(1249488000, '%Y%m%d' ) 2.日期格式化成时间戳 SELECT UNIX_TIMESTAMP('2016-05- ...

  3. shell视频

    本帖最后由 Shell_HAT 于 2014-04-18 16:51 编辑 尚观全套RHCE视频http://pan.baidu.com/s/1pJvzVR1 马哥网络班-中级视频内容http://p ...

  4. 动手编写TCP服务器系列之一:日志文件

    前言 在几个月之前,笔者想自己实现一个性能比较良好的基于tcp的服务器.于是断断续续写了个把月,因为还需要找工,还有论文什么的.拖了这么久.现在开辟这样的一个博客,我想记录下自己的思路,也和大家分享自 ...

  5. IEEEXtreme 10.0 - Ellipse Art

    这是 meelo 原创的 IEEEXtreme极限编程大赛题解 Xtreme 10.0 - Ellipse Art 题目来源 第10届IEEE极限编程大赛 https://www.hackerrank ...

  6. Python库导入错误:ImportError: No module named matplotlib.pyplot

    在Python中导入matplotlib.pyplot时出现如下错误: 在Windows操作系统下解决办法为: 打开命令提示符(按快捷键Win+r ,输入“cmd",回车),输入以下指令即可 ...

  7. git客户端基本操作

    首先下载git 一路next安装好了之后,打开任意盘符,右键打开git bash here 首先:初始首次的用户名和邮箱,之后就不用了. git config --global user.name & ...

  8. LoadRunner:VuGen开发脚本步骤(二)

    一.介绍 Loadrunner的场景能够描述在测试活动中发生的各种事件.一个场景包括一个运行虚拟用 户活动的Load Generator 机器列表,一个测试脚本的列表以及大量的虚拟用户和虚拟用户组 二 ...

  9. 关于<c:if>没有<c:else>解决方案-转载

    <c:if>没有<c:else>可以用<c:choose>来取代结构: <c:choose> <c:when test=""& ...

  10. 洛谷P2408 不同字串个数 [后缀数组]

    题目传送门 不同字串个数 题目背景 因为NOI被虐傻了,蒟蒻的YJQ准备来学习一下字符串,于是它碰到了这样一道题: 题目描述 给你一个长为N的字符串,求不同的子串的个数 我们定义两个子串不同,当且仅当 ...