iOS NSSet 学习 “无序数组” & 去重 案例
“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
posted on 2016-08-22 12:00 ACM_Someone like you 阅读(2194) 评论(0) 编辑 收藏 举报
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
2014-08-22 如何使用NSOperations和NSOperationQueues(二)