博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS NSSet 学习 “无序数组” & 去重 案例
阅读量:5884 次
发布时间:2019-06-19

本文共 1992 字,大约阅读时间需要 6 分钟。

NSSet,NSMutableSet,NSCountedSet类声明编程接口对象的无序集合(散列存储:在内存中的存储位置不连续)。

而NSArray,NSDictionary类声明编程接口对象的有序集合(有序存储:在内存中的存储位置连续)。”

NSSet 运用 hash(哈希)散列算法 查找目标集合元素比NSArray快

特点:无序性(但是可以做有序化操作),确定性,差异性(互异性) 

举例一个简单的使用场景:

去重:

NSMutableArray KVO  NSMutableArray NSSet  NSOrderedSet 各种方法 比较

结论:随着数据量增加 都比 NSMutableArray 快~

NSArray *array = @[@1,@2,@3,@4,@4,@5,@2,@2];        //NSMatableArray 去重结果: 1 2 3 4 5  有序 在 array 里面相对的顺序的"有序"    NSMutableArray *resultArray = [NSMutableArray array];    for (NSNumber *num  in array) {        if (![resultArray containsObject:num]) {
//判断该集合元素否存在 [resultArray addObject:num]; } } NSLog(@"resultArray :%@",resultArray); //KVC容器操作 //容器不仅仅能使用KVC方法实现对容器成员传递普通的操作消息,KVC还定义了特殊的一些常用操作,使用valueForKeyPath:结合操作符来使用 //这里使用对象操作符: //@distinctUnionOfObjects、@unionOfObjects //@distinctUnionOfObjects操作符返回被操作对象指定属性的集合并做去重操作,而@unionOfObjects则允许重复。如果其中任何涉及的对象为nil,则抛出异常。 //去重结果 : 5 1 2 3 4 无序 NSArray *values = [array valueForKeyPath:@"@distinctUnionOfObjects.self"]; NSLog(@"value : %@",values); //没使用 NSSet 前 其实我是会使用字典的 字典的特点 也是无序键值对 效率也是优于使用数组排重的. //无序结果 :3,2,5,1,4 NSMutableDictionary *numDictionary = [NSMutableDictionary dictionary]; for (NSNumber *num in array) { [numDictionary setObject:num forKey:num]; } NSLog(@"numDictionary all keys : %@",numDictionary.allKeys); //NSSet 去重结果 : 5 1 2 3 4 无序 NSSet *numSet = [[NSSet alloc]initWithArray:array]; NSLog(@"numSet Array : %@",numSet.allObjects); //NSSet 有序化操作 : 1 2 3 4 5 同上面的"有序" NSOrderedSet *orderNumSet = [NSOrderedSet orderedSetWithArray:array]; NSLog(@"orderNumSet Array : %@",orderNumSet.array); //KVO 容器对象操作符 distinctUnionOfObjects //3,2,5,1,4 无序 NSSet *setValues = [numSet valueForKeyPath:@"@distinctUnionOfObjects.self"]; NSLog(@"setValues : %@",setValues);

 

NSSet 具体使用 :

http://www.cnblogs.com/GISerYang/p/3340937.html

转载于:https://www.cnblogs.com/someonelikeyou/p/5795090.html

你可能感兴趣的文章
优秀大数据GitHub项目一览
查看>>
TCP/IP详解学习笔记(8)-DNS域名系统
查看>>
通过维基API实现维基百科查询功能
查看>>
bootstrap 2
查看>>
Annotation研究的一些学习资料
查看>>
webpack资料
查看>>
DotNet加密方式解析--散列加密
查看>>
OpenSSL使用2(SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12概念说明)(转)
查看>>
win 下 apache 虚拟主机配置方式
查看>>
第十一篇:基于TCP的一对回射客户/服务器程序及其运行过程分析( 下 )
查看>>
【HDU1219】AC Me(水题)
查看>>
【前端】:HTML
查看>>
从JDBC程序看为什么需要Mybatis
查看>>
ZOJ 1403&&HDU 1015 Safecracker【暴力】
查看>>
更新软件
查看>>
Windows10锁屏壁纸提取
查看>>
SSM框架——使用MyBatis Generator自动创建代码
查看>>
Logstash之Logstash inputs(file和redis插件)、Logstash outputs(elasticsearch 和redis插件)和Filter plugins...
查看>>
利用struts2<s:token>标签防止用户重复提交
查看>>
局域网基本原理与广域网基本原理
查看>>