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

  NSSet和我们常用NSArry区别是:在搜索一个元素时NSSet比NSArray效率高,主要是它用到了一个算法hash(哈希)。比如你要存储元素A,一个hash算法直接就能直接找到A应该存储的位置;同样,当你要访问A时,一个hash过程就能找到A存储的位置。而对于NSArray,若想知道A到底在不在数组中,则需要便利整个数组,显然效率较低了;

 NSSet * set = [[NSSet alloc] initWithObjects:@"one",@"two",@"three",@"four", nil];
[set count]; //返回集合中对象的个数
判断集合中是否拥有某个元素 //判断集合中是否拥有@“two”
BOOL ret = [set containsObject:@"two"]; 判断两个集合是否相等
NSSet * set2 = [[NSSet alloc] initWithObjects:@"one",@"two",@"three",@"four", nil];
//判断两个集合是否相等
BOOL ret = [set isEqualToSet:set2];

判断set是否是set2的子集合
NSSet * set2 = [[NSSet alloc] initWithObjects:@"one",@"two",@"three",@"four",@"five", nil];
//判断set是否是set2的子集合
BOOL ret = [set isSubsetOfSet:set2]; 集合也可以用枚举器来遍历
//集合也可以用枚举器来遍历
NSEnumerator * enumerator = [set objectEnumerator];
NSString *str;
while (str = [enumerator nextObject]) {
……
}

通过数组来初始化集合(数组转换为集合)
NSArray * array = [[NSArray alloc] initWithObjects:@"one",@"two",@"three",@"four", nil];
NSSet * set = [[NSSet alloc] initWithArray:array];

集合转换为数组
NSArray * array2 = [set allObjects];
、可变集合NSMutableSet //可变集合NSMutableSet
NSMutableSet * set = [[NSMutableSet alloc] init];
[set addObject:@"one"];
[set addObject:@"two"];
[set addObject:@"two"]; //如果添加的元素有重复,实际只保留一个 //删除元素
[set removeObject:@"two"];
[set removeAllObjects];

将set2中的元素添加到set中来,如果有重复,只保留一个
//将set2中的元素添加到set中来,如果有重复,只保留一个
NSSet * set2 = [[NSSet alloc] initWithObjects:@"two",@"three",@"four", nil];
[set unionSet:set2];
删除set中与set2相同的元素
[set minusSet:set2]; 、指数集合(索引集合)NSIndexSet //指数集合(索引集合)NSIndexSet
NSIndexSet * indexSet = [[NSIndexSet alloc] initWithIndexesInRange:NSMakeRange(, )]; //集合中的数字是123 根据集合提取数组中指定位置的元素
//根据集合提取数组中指定位置的元素
NSArray * array = [[NSArray alloc] initWithObjects:@"one",@"two",@"three",@"four", nil];
NSArray * newArray = [array objectsAtIndexes:indexSet]; //返回@"two",@"three",@"four"
、可变指数集合NSMutableIndexSet NSMutableIndexSet *indexSet = [[NSMutableIndexSet alloc] init];
[indexSet addIndex:]
[indexSet addIndex:];
[indexSet addIndex:];
//通过集合获取数组中指定的元素
NSArray *array = [[NSArray alloc] initWithObjects:@"one",@"two",@"three",@"four",@"five",@"six", nil];
NSArray *newArray = [array objectsAtIndexes:indexSet]; //返回@"one",@"four",@"six"

NSSet、NSMutableSet的更多相关文章

  1. NSSet、NSMutableSet基本用法

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

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

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

  3. OC中NSDictionary(字典)、NSMutableDictionary(可变字典)、NSSet(集合)、NSMutableSet(可变集合)得常用方法

    字典用于保存具有映射关系数据的集合 一个key—value对认为是一个条目(entry),字典是存储key—value对的容器 与数组不同,字典靠key存取元素 key不能重复,value必须是对象 ...

  4. NSSet和NSMutableSet 确保数据的唯一性--备

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

  5. Object-C学习之NSSet和NSMutableSet

    转自:http://blog.csdn.net/likandmydeer/article/details/7939749 一.简介 集合(set)是一组单值对象,它可以是固定的(NSSet).也可以是 ...

  6. NSSet和NSMutableSet - By吴帮雷

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

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

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

  8. IOS集合NSSet与NSMutableSet知识点

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

  9. iOS7 CookBook精彩瞬间(二)NSSet、通过Subscript访问类成员等

    1.NSSet的用法 ①NSSet是一种无序集合,基于hash实现,可以在线性时间复杂度内查找某个元素,如果要让元素有序,应当使用NSOrderedSet,要让集合可变,与NSArray类似,使用NS ...

随机推荐

  1. android studio使用发布者证书调试

    某些时候还是要用到的,直接说步骤,修改app.gradle apply plugin: 'com.android.application' android { .................... ...

  2. Java compiler level does not match the version of the installed Java project facet. springmvc1 和 Target runtime Apache Tomcat v7.0 is not defined.

    Java compiler level does not match the version of the installed Java project facet.springmvc1 : Targ ...

  3. 想当然是编程最大的坑,记更新删除过期cookie无效有感

    一般来说只要设置了cookie的过期时间,就可以实现删除cookie的作用. 可是我尝试了设置过期时间,清除cookie内容都无效. 最后才发现,我根本没有执行到那段设置过期的代码. 刚开始是因为登出 ...

  4. PLSQL_Oracle面试整理(汇总)

    2014-08-16 Created By BaoXinjian

  5. SCREAM:Error suppression ignored for

    wamp报错SCREAM:Error suppression ignored for 问题:SCREAM:Error suppression ignored for 解决: 在php.ini最下面加入 ...

  6. mapreduce任务中Shuffle和排序的过程

    mapreduce任务中Shuffle和排序的过程 流程分析: Map端: 1.每个输入分片会让一个map任务来处理,默认情况下,以HDFS的一个块的大小(默认为64M)为一个分片,当然我们也可以设置 ...

  7. ylbtech-Recode(记录)-数据库设计

    ylbtech-dbs:ylbtech-Recode(记录)-数据库设计 -- =============================================-- DatabaseName ...

  8. jquery点击改变class并toggle;jquery点击改变图片src源码并toggle;jquery显示隐藏toggle

    <html><head><meta charset="utf-8"><title></title><script ...

  9. JVM加载class文件的原理机制

    Java中的所有类,都需要由类加载器装载到JVM中才能运行.类加载器本身也是一个类,而它的工作就是把class文件从硬盘读取到内存中.在写程序的时候,我们几乎不需要关心类的加载,因为这些都是隐式装载的 ...

  10. dirname basename 截取路径中的目录以及文件名

    dirname basename    截取路径中的目录以及文件名 windows 下面: #include "shlwapi.h"#pragma comment(lib, &qu ...