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
iOS NSSet 学习 “无序数组” & 去重 案例的更多相关文章
- Javascript学习记录——数组去重
var arr = [1, 2, 3, 5, 5, '45', '45', 4, 1, '1', '2'] for (var i = 0; i < 10000; i++) { arr.push( ...
- iOS 基础之NSArray数组去重
1.面试题 现在有一个数组arr1,它里面存储的字符串分别为@“zhangsan”@“lisi”@“wangwu”@“lisi”@“zhangsan”,请将它去重后赋值给可变数组arr2输出为:@“z ...
- JS学习笔记——数组去重
<script type="text/javascript"> //indexOf"是ECMAScript5方法,IE8以下不支持,需多写兼容低版本浏览器代码 ...
- iOS数组去重的方法,超级简单
//最近新发现的一个数组去重,用不着循环,一句代码搞定 //去除数组中重复的 NSArray *oldArr = @[@"1",@"2",@"3&qu ...
- JavaScript学习系列博客_28_JavaScript 数组去重
数组去重 var arr = [1,2,3,2,2,1,3,4,2,5]; //去除数组中重复的数字 //获取数组中的每一个元素 for(var i=0 ; i<arr.length ; i++ ...
- 开源中国iOS客户端学习
开源中国iOS客户端学习 续写前言 <开源中国iOS客户端学习>续写前系列博客 http://blog.csdn.net/column/details/xfzl-kykhd.html ...
- 也谈面试必备问题之 JavaScript 数组去重
Why underscore (觉得这部分眼熟的可以直接跳到下一段了...) 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. ...
- javascript小实例,多种方法实现数组去重问题
废话不多说,直接拿干货! 先说说这个实例的要求:写一个方法实现数组的去重.(要求:执行方法,传递一个数组,返回去重后的新数组,原数组不变,实现过程中只能用一层循环,双层嵌套循环也可写,只做参考): 先 ...
- php中foreach()函数与Array数组经典案例讲解
//php中foreach()函数与Array数组经典案例讲解 function getVal($v) { return $v; //可以加任意检查代码,列入要求$v必须是数字,或过滤非法字符串等.} ...
随机推荐
- the method getcontextpath() from the type httpservletrequest refers to the missing type string
导入项目的时候容易报出这个错误,主要因为JRE(jdk版本不一致). 解决方法:就是重新配置路径,配置你机器上安装的jdk. 右击该出错项目→ Build Path → Configure Build ...
- windows2008,命令行远程登录
命令行强制开启3389服务支持server2008和2003 1.C:\Windows\System32\wbem\wmic /namespace:\\root\cimv2\terminalservi ...
- openwrt安装编译
官网安装编译推荐: https://wiki.openwrt.org/doc/howto/buildroot.exigence https://wiki.openwrt.org/doc/howto/b ...
- hdu5795 A Simple Nim 求nim求法,打表找sg值规律 给定n堆石子,每堆有若干石子,两个人轮流操作,每次操作可以选择任意一堆取走任意个石子(不可以为空) 或者选择一堆,把它分成三堆,每堆不为空。求先手必胜,还是后手必胜。
/** 题目:A Simple Nim 链接:http://acm.hdu.edu.cn/showproblem.php?pid=5795 题意:给定n堆石子,每堆有若干石子,两个人轮流操作,每次操作 ...
- x264_param_t结构体解释,设置及对应函数位置
typedef struct x264_param_t { /* CPU 标志位 */ unsigned int cpu; int i_threads; /* 并行编码多帧 */ in ...
- js动态创建input
var muiDiv = document.getElementById('mui-content'); createInput('img','text',imgSrc,muiDiv); functi ...
- 基于python的七种经典排序算法(转)
一.排序的基本概念和分类 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法. 排序的稳定性:经过某种排序后,如果两个 ...
- git branch merge到master
使用merge可以合并多个历史记录的流程. 如下图所示,bugfix分支是从master分支分叉出来的. 合并 bugfix分支到master分支时,如果master分支的状态没有被更改过,那么这个合 ...
- rest-framework框架的基本组件分析
一.快速实例化 二.序列化 三.视图 四.身份认证,权限认证,频率限制 五.分页 六.响应器 七.路由 八.解释器
- 第二章----python函数
第一节:调用函数 1.函数是什么? 函数是组织好的,可以重复利用的. 2.为什么要用到函数? 提高应用的模块性,提高重复利用率.指的是:多个文件中可能都要用到该函数,直接拿来调用就行,不用在重复写一个 ...