NSSet在实际应用中与NSArray区别不大,但是如果你希望查找NSArray中的某一个元素,则需要遍历整个数组,效率低下。而NSSet在查找某一特定的元素的时候则是根据hash算法直接找到此元素的位置,效率高。 NSSet是一个无序的,管理对个对象的集合类,最大特点是集合中不允许出现重复对象,和数学上的集合含义是一样的。除了无序,不许重复,其他功能和NSArray是一样的;需要注意的是:NSSet,NSArray里面只能添加cocoa对象,如果需要加入基本数据类型(int,float,BOOL,double等),需要将数据封装成NSNumber类型。主要是一些常见的操作,别外一些操作见其相应的文档,下面的代码部分还运用的第三方插件BlocksKit相结合;

1:NSSet一些常见的操作

NSSet *newSet=[NSSet setWithObjects:@"wujy",@"cnblogs",@"age",nil];
NSLog(@"set的个数为:%ld",[newSet count]); //不会按上面增加的顺序输入 所以NSSET是没有顺序
NSEnumerator *enumeratorset=[newSet objectEnumerator];
for (NSObject *obj in enumeratorset) {
NSLog(@"key为:%@",obj);
} //是否存在
BOOL isExict=[newSet containsObject:@"wujy"];
NSLog(@"是否存在:%d",isExict); //返回任意一个元素
NSString *anyObje=[newSet anyObject];
NSLog(@"返回任意一个元素:%@",anyObje); //判断是否包含这个元素 并还回
NSObject *memberObj=[newSet member:@"age"];
if (memberObj) {
NSLog(@"存在元素(age):%@",memberObj);
} //简便创建nsset
NSSet *twoSet=[[NSSet alloc] initWithArray:@[@,@,@,@"wujy"]]; //判断两个nsset是否相等
BOOL isEaual=[newSet isEqualToSet:twoSet];
NSLog(@"判断两个nsset是否相等(0):%d",isEaual); //判断两个nsset是否交集
BOOL isInterSects=[newSet intersectsSet:twoSet];
NSLog(@"判断两个nsset是否交集(1):%d",isInterSects); //Blocks NSSet *blockSet=[[NSSet alloc]initWithObjects:@,@,@,@,@,@,nil];
//遍历
[blockSet bk_each:^(id obj) {
NSLog(@"block遍历的值为:%@",obj);
}]; //过滤
NSSet *selectSet=[blockSet bk_select:^BOOL(id obj) {
BOOL select=[obj intValue]>?YES:NO;
return select;
}];
NSLog(@"过滤后的nsset(6,5,4):%@",selectSet); //过滤 只在第一个符合条件时就停止
NSSet *matchSet=[blockSet bk_match:^BOOL(id obj) {
BOOL select=[obj intValue]<?YES:NO;
return select;
}];
NSLog(@"matchSet过滤后的nsset(3):%@",matchSet); //取反过滤
NSSet *rejectSet=[blockSet bk_reject:^BOOL(id obj) {
BOOL select=[obj intValue]<?YES:NO;
return select;
}];
NSLog(@"取反过滤后的nsset(6,5,4):%@",rejectSet); //对各个项进行处理
NSSet *mapSet=[blockSet bk_map:^id(id obj) {
return @([obj intValue]+);
}];
NSLog(@"修改后的值为(7,3,6,2,5,4):%@",mapSet); //是否符合条件 返回bool
BOOL isSelected=[blockSet bk_any:^BOOL(id obj) {
BOOL select=[obj intValue]>?YES:NO;
return select;
}];
NSLog(@"%d符合条件1",isSelected); //判断是否所有的项都符合这个条件
BOOL allSelected=[blockSet bk_all:^BOOL(id obj) {
BOOL select=[obj intValue]>?YES:NO;
return select;
}];
NSLog(@"%d符合条件0",allSelected); //判断是否所有的项都不符合这个条件
BOOL noneSelected=[blockSet bk_none:^BOOL(id obj) {
BOOL select=[obj intValue]>?YES:NO;
return select;
}];
NSLog(@"%d符合条件1",noneSelected);

2:NSMutableSet一些常见的操作

    //创建
NSMutableSet *mutableSet=[[NSMutableSet alloc]initWithCapacity:];
[mutableSet addObject:@];
[mutableSet addObjectsFromArray:@[@,@,@]];
NSLog(@"增加后的NSMutableSet(3,2,1,4):%@",mutableSet); //把nsset增加进去
[mutableSet unionSet:[NSSet setWithObjects:@,@,nil]];
NSLog(@"增加后的NSMutableSet(3,6,2,5,1,4):%@",mutableSet); //去除元素
[mutableSet removeObject:@];
NSLog(@"去除后的元素(3,6,2,1,4):%@",mutableSet); //删除nsset里面的
[mutableSet minusSet:[NSSet setWithObjects:@,@,nil]];
NSLog(@"去除后nsset的元素(3,6,4):%@",mutableSet); //nsset转化成nsmutableset
NSSet *newSet=[NSSet setWithObjects:@,@,@, nil];
NSMutableSet *newMutableSet=[NSMutableSet set];
[newMutableSet setSet:newSet];
NSLog(@"转换后的mutableset值为(12,10,11):%@",newMutableSet); //Blocks
//过滤
NSMutableSet *blockMutableSet=[[NSMutableSet alloc]initWithObjects:@,@,@,nil];
[blockMutableSet bk_performSelect:^BOOL(id obj) {
BOOL select=[obj intValue]>?YES:NO;
return select;
}];
NSLog(@"过滤后的nsmutableset(25,23):%@",blockMutableSet); //取反过滤
[blockMutableSet bk_performReject:^BOOL(id obj) {
BOOL select=[obj intValue]>?YES:NO;
return select;
}];
NSLog(@"取反过滤后的nsmutableset(23):%@",blockMutableSet); //对项进行修改
[blockMutableSet bk_performMap:^id(id obj) {
return @([obj intValue]+);
}];
NSLog(@"修改后的nsmutableset(24):%@",blockMutableSet);

3:指数集合(索引集合)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"

最近有个妹子弄的一个关于扩大眼界跟内含的订阅号,每天都会更新一些深度内容,在这里如果你感兴趣也可以关注一下(嘿对美女跟知识感兴趣),当然可以关注后输入:github 会有我的微信号,如果有问题你也可以在那找到我;当然不感兴趣无视此信息;

IOS集合NSSet与NSMutableSet知识点的更多相关文章

  1. iOS - OC NSSet 集合

    前言 NSSet:集合 @interface NSSet<__covariant ObjectType> : NSObject <NSCopying, NSMutableCopyin ...

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

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

  3. NSSet、NSMutableSet基本用法

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

  4. NSSet、NSMutableSet

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

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

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

  6. ios 集合总结

    NSArray 用于对象有序集合(相当于是数组) 它有两个限制: 1. 它只能存储objective-c的对象,但不能存储C中的基本数据类型,如int , float, enum, struct等. ...

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

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

  8. iOS 集合的深复制与浅复制

    概念 对象拷贝有两种方式:浅复制和深复制.顾名思义,浅复制,并不拷贝对象本身,仅仅是拷贝指向对象的指针:深复制是直接拷贝整个对象内存到另一块内存中. 一图以蔽之 再简单些说:浅复制就是指针拷贝:深复制 ...

  9. ios集合

    Foundation framework中用于收集cocoa对象(NSObject对象)的三种集合分别是: NSArray 用于对象有序集合(数组) NSSet 用于对象无序集合 (集合) NSDic ...

随机推荐

  1. 关于welcome-file-list(欢迎页)不起作用的解决办法

    今天我遇到了一个问题,就是直接输入http://localhost:8080/xxx-admin/,不是跳转到index.html,而是报404找不到的错误,根据错误信息看明显是没有跳转到index. ...

  2. EditorWindow简单双击效果

    Editor模式下的控件没有提供直接检测双击的消息,但可以简单模拟出双击检测的效果,代码如下所示: private double clickTime = 0f; ... if (GUILayout.B ...

  3. Spring Remoting: Hessian--转

    原文地址:http://www.studytrails.com/frameworks/spring/spring-remoting-hessian.jsp Concept Overview The p ...

  4. [Node.js] OAuth 2 和 passport框架

    原文地址:http://www.moye.me/?p=592 OAuth是什么 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列 ...

  5. 【入门必备】最佳的 Node.js 学习教程和资料书籍

    Web 开发人员对 Node.js 的关注日益增多,更多的公司和开发者开始尝试使用 Node.js 来实现一些对实时性要求高,I/O密集型的业务.这篇文章中,我们整理了一批优秀的资源,你可以得到所有你 ...

  6. C++ 封装互斥对象

    多线程程序中为了防止线程并发造成的竞态,需要经常使用到Mutex进行数据保护.posix提供了phtread_mutex_t进行互斥保护数据.Mutex的使用需要初始化和释放对应(phtread_mu ...

  7. Android学习笔记之ConnectivityManager+NetWorkInfo

    PS:眼看就要开学了,该收收心了. 学习内容: 1.ConnecivityManager 2.NetWorkInfo   ConnectivityManger:网络连接管理者,用于管理Android设 ...

  8. Android 学习笔记 Service

    PS:前几篇的内容光是上代码了,也没有细细的讲解..感觉这样写很不好..因此还是多一些讲解吧... 学习内容: 1.了解Service... 2.Service的启动与停止.. 3.绑定与取消绑定Se ...

  9. 有关CLR的初学小整理(可能理解不深刻,望大牛指出)

    1. .Net程序通过CLR去加载运行管理代码, 加载CLR的进程成为“宿主”,通常操作系统加载. 加载CLR的进程也可以为某个DLL,也成为“宿主” 2. 宿主接口使宿主能够对运行库的更多方面进行控 ...

  10. 重新想象 Windows 8 Store Apps (36) - 通知: Tile 详解

    [源码下载] 重新想象 Windows 8 Store Apps (36) - 通知: Tile 详解 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 通知 Tile ...