NSSet和NSMutableSet是无序的, 但是它保证数据的唯一性。当插入相同的数据时,不会有任何效果。从内部实现来说是hash表,所以可以常数时间内查找一个数据。

1、NSSet的使用

[NSSet setWithSet:(NSSet *)set]; 用另外一个set对象构造
[NSSet setWithArray:(NSArray *)array];用数组构造
[NSSet setWithObjects:...]:创建集合对象,并且初始化集合中的数值,结尾必需使用nil标志。
[set count] ; 得到这个结合对象的长度。
[set containsObject:...]: 判断这个集合中是否存在传入的对象,返回Bool值。
[set objectEnumerator]: 将集合放入迭代器。
[enumerator nextObject]:得到迭代器中的下一个节点数据,使用while遍历这个迭代器,方可遍历集合对象中的对象。
[set isEqualToSet:objset]:判断两个集合是否完全相等,返回Bool值。
[set isSubsetOfSet:objset]:判断集合中的所有数据是否都相等与objeset集合中,返回Bool值。
[set allObjects];

示例代码:

1.1 以NSArray构造set

  1. NSArray *array = [[NSArray alloc] initWithObjects:@"对象abc",@"rongfzh", @"totogo2010",nil];
  2. NSSet *set3 = [NSSet setWithArray:array];
  3. NSLog(@"%@", set3);

打印:

  1. 2012-07-10 09:39:02.015 objectiveC[720:403] {(
  2. rongfzh,
  3. "\U5bf9\U8c61abc",
  4. totogo2010
  5. )}

1.2 set的一些比较方法的使用。

  1. int main(int argc, const char * argv[])
  2. {
  3. @autoreleasepool {
  4. NSSet *set = [NSSet setWithObjects:@"25",@"age",@"张三",@"name",@"男",nil];
  5. NSSet *set1 = [NSSet setWithObjects:@"25",@"age",@"张三",@"name",@"男",@"性别",nil];
  6. NSLog(@"set count:%lu", [set count]);
  7. //判断是否含有age字符串
  8. if([set containsObject:@"age"]) {
  9. NSLog(@"set包含age");
  10. }
  11. //判断set 是否等于set1
  12. if ([set isEqualToSet:set1]) {
  13. NSLog(@"set 等于 set1");
  14. }
  15. //判断set是否是否是set1的子集合
  16. if ([set isSubsetOfSet:set1]) {
  17. NSLog(@"set isSubsetOfSet set1");
  18. }
  19. //获取所有set对象
  20. NSArray *array = [set allObjects];
  21. NSLog(@"array:%@", array);
  22. //迭代遍历
  23. NSEnumerator *enumerator = [set objectEnumerator];
  24. for (NSObject *object in enumerator) {
  25. NSLog(@"set1里的对象:%@", object);
  26. }
  27. }
  28. return 0;
  29. }

打印结果:

  1. 2012-07-10 09:50:32.018 objectiveC[939:403] set count:5
  2. 2012-07-10 09:50:32.020 objectiveC[939:403] set包含age
  3. 2012-07-10 09:50:32.021 objectiveC[939:403] set isSubsetOfSet set1
  4. 2012-07-10 09:50:32.023 objectiveC[939:403] array:(
  5. age,
  6. 25,
  7. "\U7537",
  8. "\U5f20\U4e09",
  9. name
  10. )
  11. 2012-07-10 09:50:32.027 objectiveC[939:403] set1里的对象:age
  12. 2012-07-10 09:50:32.028 objectiveC[939:403] set1里的对象:25
  13. 2012-07-10 09:50:32.028 objectiveC[939:403] set1里的对象:男
  14. 2012-07-10 09:50:32.029 objectiveC[939:403] set1里的对象:张三
  15. 2012-07-10 09:50:32.029 objectiveC[939:403] set1里的对象:name

2、NSMutableSet的使用

NSMutableSet继承NSSet,它可以使用NSSet的方法。

[NSMutableSet setWithCapacity:6]:创建可变集合对象,并且初始化长度为6。
[set addObject: obj] : 向集合中动态的添加对象。
[set removeObject:obj]:删除集合中的一个对象。
[set removeAllObjects]:删除集合中的所有对象。
[set unionSet:obj]:向集合中添加一个obj集合的所有数据。
[set minusSet:obj]:向集合中删除一个obj集合的所有数据。
[set intersectSet]:向集合中删除一个不包含obj集合的所有数据。

示例代码:

  1. int main(int argc, const char * argv[])
  2. {
  3. @autoreleasepool {
  4. NSMutableSet *muSet = [NSMutableSet setWithCapacity:6];
  5. [muSet addObject:@"对象1"];
  6. NSSet *set = [NSSet setWithObjects:@"对象2",@"对象3", @"被企鹅咬了一口", nil];
  7. //添加set数据
  8. [muSet unionSet:set];
  9. for (NSObject *object in muSet) {
  10. NSLog(@"all nuSet:%@",object);
  11. }
  12. NSSet *set1 = [NSSet setWithObjects:@"对象2",@"对象3", nil];
  13. //在muSet中删除包含set1总数据
  14. [muSet minusSet:set1];
  15. for (NSObject *object in muSet) {
  16. NSLog(@"after minusSet:%@",object);
  17. }
  18. }
  19. return 0;
  20. }

打印结果:

  1. 2012-07-10 10:09:08.194 objectiveC[1156:403] all nuSet:对象1
  2. 2012-07-10 10:09:08.196 objectiveC[1156:403] all nuSet:被企鹅咬了一口
  3. 2012-07-10 10:09:08.196 objectiveC[1156:403] all nuSet:对象2
  4. 2012-07-10 10:09:08.197 objectiveC[1156:403] all nuSet:对象3
  5. 2012-07-10 10:09:08.198 objectiveC[1156:403] after minusSet:对象1
  6. 2012-07-10 10:09:08.198 objectiveC[1156:403] after minusSet:被企鹅咬了一口

NSSet和NSMutableSet 确保数据的唯一性--备的更多相关文章

  1. [Objective-C] 010_Foundation框架之NSSet与NSMutableSet

    在Cocoa Foundation中的NSSet和NSMutableSet ,和NSArray功能性质一样,用于存储对象属于集合.但是NSSet和NSMutableSet是无序的, 保证数据的唯一性, ...

  2. 设计模式系列之单例模式(Singleton Pattern)——确保对象的唯一性

    模式概述 模式定义 模式结构图 饿汉式单例与懒汉式单例 饿汉式单例 懒汉式单例 模式应用 模式在JDK中的应用 模式在开源项目中的应用 模式总结 主要优点 适用场景 说明:设计模式系列文章是读刘伟所著 ...

  3. NSSet、NSMutableSet基本用法

    NSSet.NSMutableSet基本用法 在Foundation框架中,提供了NSSet类,它是一组单值对象的集合,且NSSet实例中元素是无序,同一个对象只能保存一个. 一.不可变集合NSSet ...

  4. NSSet、NSMutableSet

    NSSet和NSArray功能性质一样,用于存储对象,属于集合:只能添加cocoa对象,基本数据类型需要装箱. NSSet . NSMutableSet是无序的集合,在内存中存储方式是不连续的,而NS ...

  5. 事物的隔离级别与并发完美体现了cap理论(确保数据完整、安全、一致性,在此基础上实现高性能访问(鱼和熊掌不可兼得)

    事物的隔离级别与并发完美体现了cap理论(确保数据完整.安全.一致性,在此基础上实现高性能访问(鱼和熊掌不可兼得)

  6. Oracle Goldengate是如何保证数据有序和确保数据不丢失的?

    工作中一直在用Oracle 的中间件Oracle GondenGate 是如何保证消息的有序和不丢失呢? Oracle GoldenGate逻辑架构 首先,先看一下Oracle GoldenGate ...

  7. NSSet和NSMutableSet - By吴帮雷

    1.NSSet的使用 [NSSet setWithSet:(NSSet *)set]; 用另外一个set对象构造 [NSSet setWithArray:(NSArray *)array];用数组构造 ...

  8. IOS集合NSSet与NSMutableSet知识点

    NSSet在实际应用中与NSArray区别不大,但是如果你希望查找NSArray中的某一个元素,则需要遍历整个数组,效率低下.而NSSet在查找某一特定的元素的时候则是根据hash算法直接找到此元素的 ...

  9. NSArray(二) 、 NSMutableArray 、 NSSet 、 NSMutableSet

    1 创建五个学生对象,放入数组并遍历 1.1 问题 创建一个自定义类TRStudent,为该类生成五个对象.把这五个对象存入一个数组当中,然后遍历数组. 1.2 步骤 实现此案例需要按照如下步骤进行. ...

随机推荐

  1. Oracle 数据库基本操作——实用手册、表操作、事务操作、序列

    目录: 0. 参考链接与参考手册1. oracle 实用(常用操作)指令2. 数据库基本操作语法 a) 表操作 1)创建表 2)更新表 3)删除表 4)查询 b) 事务操作 c) 序列操作 1)创建序 ...

  2. Hitting the 2100 parameter limit (SQL Server) when using Contains()

    1down vote My solution (Guides -> List of Guid): List<tstTest> tsts = new List<tstTest&g ...

  3. wcf长连接

    项目有用到wcf  大体是jquery + webservice + wcf(网页是客户端,wcf是服务端),现在需要服务端往客户端推送信息,本来是用客户端ajax访问 2秒一次访问服务端,后来觉得这 ...

  4. android改动tab 导航 指示器颜色

    我事实上想改动的上面的蓝色条条,改成红色. 这个问题实在是困扰我了太长时间.之前參照google的这个文章: https://developer.android.com/training/basics ...

  5. oracle中从指定日期中获取月份或者部分数据

    从指定日期中获取部分数据: 如月份: select to_CHAR(sysdate,'MM') FROM DUAL; 或者: select extract(month from sysdate) fr ...

  6. vc++上的MFC的对象序列化和反序列化

      注意点: 1. 必须类型序列化声明    DECLARE_SERIAL( Person )  2. 必须写出实现宏 IMPLEMENT_SERIAL(Person, CObject, VERSIO ...

  7. 使用一个小图片tile平铺到ImageView中或Activity背景

    方法两种: 首先必须在res/drawable目录下包含一个background.jpg 方法1:在res/drawable中创建一个xml文件(background_repeat.xml) 内容为 ...

  8. 再探Java基础——String.format(String format, Object… args)的使用

    最近看到类似这样的一些代码:String.format("参数%s不能为空", "birthday"); 以前还没用过这功能不知咐意思,后研究了一下,详细讲解如 ...

  9. codevs 2800 送外卖(状压dp)

    /* f[i][j] 表示走过的点构成i状态 且最后到达的点为j时的最优解 在那最后一个状态就是(1<<n+1)-1 每个点都到达 在由此回到0 */ #include<iostre ...

  10. 安装VS2013的离线MSDN帮助文档

    作为vs的初学者,安装帮助文档有利于快速掌握.net的基本语法,对于摸索学习的同学帮助很大. VS2013和VS2012的帮助文档目前为止还是一样 下面是下载地址    http://www.micr ...