NSSet和NSArry的区别&NSSet的一般用法
2016-01-08 12:52
316 查看
引用自:http://zhidao.baidu.com/link?url=uD25s5OdnfmnNzvEUcYl3eCuSNE20BytMTgTQ_L42YM3B0DWWCR3Fj3gBStI09GKBwJT1obbGSnPWgwDlr-7X1qByLjjn8VORAjMygfxJZ3
http://blog.csdn.net/ms2146/article/details/8657011
1.NSSet和NSArry的区别:
NSSet到底什么类型,其实它和NSArray功能性质一样,用于存储对象,属于集合; NSSet , NSMutableSet类声明编程接口对象,无序的集合,在内存中存储方式是不连续的,不像NSArray,NSDictionary(都是有序的集合)类声明编程接口对象是有序集合,在内存中存储位置是连续的;NSSet和我们常用NSArry区别是:在搜索一个一个元素时NSSet比NSArray效率高,主要是它用到了一个算法hash(散列,也可直译为哈希);开发文档中这样解释:You can use sets as an alternative to arrays when the order of elements isn’t important and performance in testing whether an object is contained in the set is a consideration—while arrays are ordered, testing for membership is slower than with sets.比如你要存储元素A,一个hash算法直接就能直接找到A应该存储的位置;同样,当你要访问A时,一个hash过程就能找到A存储的位置.而对于NSArray,若想知道A到底在不在数组中,则需要便利整个数组,显然效率较低了;NSSet,NSArray都是类,只能添加cocoa对象,如果需要加入基本数据类型(int,float,BOOL,double等),需要将数据封装成NSNumber类型.
2.NSSet的一般用法
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSSet *set1 = [NSSet setWithObjects:@"a", @"b", @"c", @"d", nil]; NSSet *set2 = [[NSSet alloc] initWithObjects:@"1", @"2", @"3", nil]; NSArray *array = [NSArray arrayWithObjects:@"a", @"b", @"c", nil]; NSSet *set3 = [NSSet setWithArray:array]; NSLog(@"set1 :%@", set1); NSLog(@"set2 :%@", set2); NSLog(@"set3 :%@", set3); //获取集合个数 NSLog(@"set1 count :%d", set1.count); //以数组的形式获取集合中的所有对象 NSArray *allObj = [set2 allObjects]; NSLog(@"allObj :%@", allObj); //获取任意一对象 NSLog(@"anyObj :%@", [set3 anyObject]); //是否包含某个对象 NSLog(@"contains :%d", [set3 containsObject:@"obj2"]); //是否包含指定set中的对象 NSLog(@"intersect obj :%d", [set1 intersectsSet:set3]); //是否完全匹配 NSLog(@"isEqual :%d", [set2 isEqualToSet:set3]); //是否是子集合 NSLog(@"isSubSet :%d", [set3 isSubsetOfSet:set1]); NSSet *set4 = [NSSet setWithObjects:@"a", @"b", nil]; NSArray *ary = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", nil]; NSSet *set5 = [set4 setByAddingObjectsFromArray:ary]; NSLog(@"addFromArray :%@", set5); NSMutableSet *mutableSet1 = [NSMutableSet setWithObjects:@"1", @"2", @"3", nil]; NSMutableSet *mutableSet2 = [NSMutableSet setWithObjects:@"a", @"2", @"b", nil]; NSMutableSet *mutableSet3 = [NSMutableSet setWithObjects:@"1", @"c", @"b", nil]; //集合元素相减 [mutableSet1 minusSet:mutableSet2]; NSLog(@"minus :%@", mutableSet1); //只留下相等元素 [mutableSet1 intersectSet:mutableSet3]; NSLog(@"intersect :%@", mutableSet1); //合并集合 [mutableSet2 unionSet:mutableSet3]; NSLog(@"union :%@", mutableSet2); //删除指定元素 [mutableSet2 removeObject:@"a"]; NSLog(@"removeObj :%@", mutableSet2); //删除所有数据 [mutableSet2 removeAllObjects]; NSLog(@"removeAll :%@", mutableSet2); } return 0; } 日志:[plain] view plaincopy set1 :{( d, b, c, a )} set2 :{( 1, 2, 3 )} set3 :{( a, b, c )} set1 count :4 allObj :( 1, 2, 3 ) anyObj :a contains :0 intersect obj :1 isEqual :0 isSubSet :1 addFromArray :{( 3, b, 1, 4, 2, a )} minus :{( 1, 3 )} intersect :{( 1 )} union :{( b, 1, 2, a, c )} removeObj :{( b, 1, 2, c )} removeAll :{( )}相关文章推荐
- 【iOS开发】判断app启动的方式(launchOptions)
- netbeans c/c++ (or gcc) & nasm co-work
- 表达式2叉树(前序,中序,后序)的非递归实现_模板实现
- 转:DDR3详解(以Micron MT41J128M8 1Gb DDR3 SDRAM为例)之一
- SICP 习题 (2.6) 解题总结:丘奇计数
- JsonConvert 使用注意事项之 Serializable
- iOS中NSnumber的使用 NSValue的使用
- C# winForm 将窗体状态栏StatusStrip示例(显示当前时间)
- Java 代码创建selector
- iOS中NSdata的使用
- Android-Universal-Image-Loader是一个开源的UI组件程序
- 将数据库中的用户名和密码显示到JSP页面
- 显著性检测算法学习阶段论文总结(1)
- LinkedList双链表简单分析,及单链表的实现代码
- NSURLSession强引用问题
- Java环境配置
- bootstrap 学习之路——开始篇
- python-ldap
- 行为树-rain插件简单例程资源
- git服务器的搭建