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 学习 “无序数组” & 去重 案例的更多相关文章

  1. Javascript学习记录——数组去重

    var arr = [1, 2, 3, 5, 5, '45', '45', 4, 1, '1', '2'] for (var i = 0; i < 10000; i++) { arr.push( ...

  2. iOS 基础之NSArray数组去重

    1.面试题 现在有一个数组arr1,它里面存储的字符串分别为@“zhangsan”@“lisi”@“wangwu”@“lisi”@“zhangsan”,请将它去重后赋值给可变数组arr2输出为:@“z ...

  3. JS学习笔记——数组去重

    <script type="text/javascript"> //indexOf"是ECMAScript5方法,IE8以下不支持,需多写兼容低版本浏览器代码 ...

  4. iOS数组去重的方法,超级简单

    //最近新发现的一个数组去重,用不着循环,一句代码搞定 //去除数组中重复的 NSArray *oldArr = @[@"1",@"2",@"3&qu ...

  5. JavaScript学习系列博客_28_JavaScript 数组去重

    数组去重 var arr = [1,2,3,2,2,1,3,4,2,5]; //去除数组中重复的数字 //获取数组中的每一个元素 for(var i=0 ; i<arr.length ; i++ ...

  6. 开源中国iOS客户端学习

    开源中国iOS客户端学习 续写前言 <开源中国iOS客户端学习>续写前系列博客    http://blog.csdn.net/column/details/xfzl-kykhd.html ...

  7. 也谈面试必备问题之 JavaScript 数组去重

    Why underscore (觉得这部分眼熟的可以直接跳到下一段了...) 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. ...

  8. javascript小实例,多种方法实现数组去重问题

    废话不多说,直接拿干货! 先说说这个实例的要求:写一个方法实现数组的去重.(要求:执行方法,传递一个数组,返回去重后的新数组,原数组不变,实现过程中只能用一层循环,双层嵌套循环也可写,只做参考): 先 ...

  9. php中foreach()函数与Array数组经典案例讲解

    //php中foreach()函数与Array数组经典案例讲解 function getVal($v) { return $v; //可以加任意检查代码,列入要求$v必须是数字,或过滤非法字符串等.} ...

随机推荐

  1. iOS- 详解文本属性Attributes(转)

    iOS- 详解文本属性Attributes 1.NSKernAttributeName: @10 调整字句 kerning 字句调整 2.NSFontAttributeName : [UIFont s ...

  2. Linux HugePage特性

    Linux HugePage特性 HugePage,就是指的大页内存管理方式.与传统的4kb的普通页管理方式相比,HugePage为管理大内存(8GB以上)更为高效.本文描述了什么是HugePage, ...

  3. svn密码 在服务端 到底是明文保存,还是密文保存

    svn密码 在服务端 到底是明文保存,还是密文保存 之前在ubuntu上搭建svn服务端,记得密码就是明文保存的, 但最近项目,我们老大说,他搭建的是加密后的,我就比较纳闷了, 经过偷偷的瞄一下,不就 ...

  4. Spring MVC生成RSS源

    下面的示例演示如何使用Spring Web MVC框架生成RSS源. 首先使用Eclipse IDE,并按照以下步骤使用Spring Web Framework开发基于动态表单的Web应用程序: 创建 ...

  5. 创建一个动作-Action类:

    让我们创建一个Java文件HelloWorldAction.java的Java资源> SRC下一个的包名com.yiibai.struts2与下面的内容. package com.yiibai. ...

  6. 设置内容 - text()、html() 以及 val()

    我们将使用前一章中的三个相同的方法来设置内容: text() - 设置或返回所选元素的文本内容 html() - 设置或返回所选元素的内容(包括 HTML 标记) val() - 设置或返回表单字段的 ...

  7. spark hive结合杂记(hive-site.xml)

    1.下载spark源码,在spark源码目录下面有个make-distribution.sh文件,修改里面的参数,使编译后能支持hive,修改后执行该文件.(要预先安装好maven才能编译). 2.将 ...

  8. ASP.NET动态网站制作(30)-- WEBService

    前言:继续讲正则表达式,然后介绍一下webservice. 内容: 1.匹配QQ号的正则表达式:^[1-9]\d{4,10}$:匹配手机号的正则表达式:^(0|86)?(13|14|15|18)[0- ...

  9. PYTHON -创建 表 和 插入 数据

    import sqlite3 conn = sqlite3.connect('y_user_data2.db') cursor = conn.cursor() #create tablecursor. ...

  10. UIAlertController custom font, size, color

    本文转载至 http://stackoverflow.com/questions/26460706/uialertcontroller-custom-font-size-color up vote2d ...