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

1、集合:集合(NSSet)和数组(NSArray)有相似之处,都是存储不同的对象的地址;不过NSArray是有序的集合,NSSet是无序的集合。
集合是一种哈希表,运用散列算法,查找集合中的元素比数组速度更快,但是它没有顺序。

1 NSSet * set = [[NSSet alloc] initWithObjects:@"one",@"two",@"three",@"four", nil];
2 [set count]; //返回集合中对象的个数

判断集合中是否拥有某个元素

1 //判断集合中是否拥有@“two”
2 BOOL ret = [set containsObject:@"two"];

判断两个集合是否相等

1 NSSet * set2 = [[NSSet alloc] initWithObjects:@"one",@"two",@"three",@"four", nil];
2 //判断两个集合是否相等
3 BOOL ret = [set isEqualToSet:set2];

判断set是否是set2的子集合

1 NSSet * set2 = [[NSSet alloc] initWithObjects:@"one",@"two",@"three",@"four",@"five", nil];
2 //判断set是否是set2的子集合
3 BOOL ret = [set isSubsetOfSet:set2];

集合也可以用枚举器来遍历

1 //集合也可以用枚举器来遍历
2 NSEnumerator * enumerator = [set objectEnumerator];
3 NSString *str;
4 while (str = [enumerator nextObject]) {
5 ……
6 }

通过数组来初始化集合(数组转换为集合)

1 NSArray * array = [[NSArray alloc] initWithObjects:@"one",@"two",@"three",@"four", nil];
2 NSSet * set = [[NSSet alloc] initWithArray:array];

集合转换为数组

1 NSArray * array2 = [set allObjects];

2、可变集合NSMutableSet

1 //可变集合NSMutableSet
2 NSMutableSet * set = [[NSMutableSet alloc] init];
3 [set addObject:@"one"];
4 [set addObject:@"two"];
5 [set addObject:@"two"]; //如果添加的元素有重复,实际只保留一个

删除元素

1 //删除元素
2 [set removeObject:@"two"];
3 [set removeAllObjects];

将set2中的元素添加到set中来,如果有重复,只保留一个

1 //将set2中的元素添加到set中来,如果有重复,只保留一个
2 NSSet * set2 = [[NSSet alloc] initWithObjects:@"two",@"three",@"four", nil];
3 [set unionSet:set2];

删除set中与set2相同的元素

1 [set minusSet:set2];

3、指数集合(索引集合)NSIndexSet

1 //指数集合(索引集合)NSIndexSet
2 NSIndexSet * indexSet = [[NSIndexSet alloc] initWithIndexesInRange:NSMakeRange(1, 3)]; //集合中的数字是123

根据集合提取数组中指定位置的元素

1 //根据集合提取数组中指定位置的元素
2 NSArray * array = [[NSArray alloc] initWithObjects:@"one",@"two",@"three",@"four", nil];
3 NSArray * newArray = [array objectsAtIndexes:indexSet]; //返回@"two",@"three",@"four"

4、可变指数集合NSMutableIndexSet

1 NSMutableIndexSet *indexSet = [[NSMutableIndexSet alloc] init];
2 [indexSet addIndex:0]
3 [indexSet addIndex:3];
4 [indexSet addIndex:5];
5 //通过集合获取数组中指定的元素
6 NSArray *array = [[NSArray alloc] initWithObjects:@"one",@"two",@"three",@"four",@"five",@"six", nil];
7 NSArray *newArray = [array objectsAtIndexes:indexSet]; //返回@"one",@"four",@"six" 总结: 这个集合现在给我的感觉就是用NSIndexSet从NSArray里面取元素比较方便,平常真的很少用到 = =

【转】 OC基础数据类型-NSSet的更多相关文章

  1. OC基础数据类型-NSSet

    1.集合:集合(NSSet)和数组(NSArray)有相似之处,都是存储不同的对象的地址:不过NSArray是有序的集合,NSSet是无序的集合.集合是一种哈希表,运用散列算法,查找集合中的元素比数组 ...

  2. OC基础--数据类型与表达式

    前言 做iOS开发有3年了,从当初的小白到现在,断断续续看过很多资料,之前也写过一些博文来记录,但是感觉知识点都比较凌乱.所以最近准备抽时间把iOS开发的相关知识进行一个梳理,主要分为OC基础.UI控 ...

  3. OC基础数据类型-NSNumber

    1.NSNumber:专门用来装基础类型的对象,把整型.单精度.双精度.字符型等基础类型存储为对象 //基本数据类型 //专门用来装基础类型的对象 NSNumber * intNumber = [[N ...

  4. Objective-C基础数据类型-NSSet[转]

    转自GISerYang 集合: 集合(NSSet)和数组(NSArray)有相似之处,都是存储不同的对象的地址:不过NSArray是有序的集合,NSSet是无序的集合. 集合是一种哈希表,运用散列算法 ...

  5. OC基础数据类型-NSString

    1.字符串的初始化 //字符串的初始化 NSString *str = @"Hello world!"; NSString *str2 = [[NSString alloc] in ...

  6. OC基础数据类型-NSData-NSMutableData-NSString

    NSData和NSMutableData存储的是二进制数据,在文件操作,网络,以及核心图形图像中使用较广泛.NSData创建后不可以再修改,NSMutableData可以再次修改. 1.NSStrin ...

  7. OC基础数据类型-NSData

    1.NSData,数据,当我们需要把一些信息写入到文件里或发送到网络上,我们需要把这些数据转换下,变成纯粹的0.1字符流 1 NSString * str = @"hello, world! ...

  8. OC基础数据类型-NSValue

    1.NSValue:将指针等复杂的类型存储为对象 struct sct { int a; int b; }sctt; NSValue * value = [[NSValue alloc] initWi ...

  9. OC基础数据类型-NSDictionary

    1.字典NSDictionary 字典与数组的区别:数组讲究顺序,而字典可以快速帮助我们找到数据,数据是我们的目的,键是我们的手段 NSDictionary *dict = [[NSDictionar ...

随机推荐

  1. struts2中获取request、response,与android客户端进行交互(文件传递给客户端)

    用struts2作为服务器框架,与android客户端进行交互需要得到request.response对象. struts2中获取request.response有两种方法. 第一种:利用Servle ...

  2. 《Effective C++》条款26 防卫潜伏的ambiguity模棱两可的状态

    每个人都有思想.有些人相信自由经济学,有些人相信来生.有些人甚至相信COBOL是一种真正的程序设计语言.C++也有一种思想:它认为潜在的二义性不是一种错误.ambiguity 这是潜在二义性的一个例子 ...

  3. java 表格项的删除、编辑、增加 修改版

    修改之后的java 代码: package com.platformda.optimize; import java.awt.BorderLayout; import java.awt.Button; ...

  4. 【转】Android 驱动开发系列四

    原文网址:http://www.2cto.com/kf/201304/202040.html 时隔多日,终于都抽出时间来写blog了.废话不多说,接着上一篇,这里将介绍如何编写HAL层(硬件抽象层)对 ...

  5. 使用VisualStudio进行单元测试之三

    私有方法需不需要测试,本文不做讨论.假设您也认为有时候,私有方法也需要进行测试,那就一起来看看如何进行私有方法的测试. 准备测试代码 测试用的代码还是前面测试时使用过的代码,不同之处就是在类中增加了一 ...

  6. robotium源码方法备注---clicker.java

    1.clickOnScreen(float x,float y) 在屏幕上点击一个指定的区域(x,y)横纵坐标 2.clickLongOnScreen(float x,float y, int tim ...

  7. suse linux编译安装GCC报错

    gcc编译安装过程 1.先安装三个库 gmp mprc mpc 这三个库的源码要到官网去下载 1)安装gmp:首先建立源码同级目录 gmp-build,输入命令,第一次编译不通过,发现缺少一个叫m4的 ...

  8. 新手入门 acm 输入输出练习

    A + B Problem(1000) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  9. Android学习笔记(三)Application类简介

    每次运行APP时,Application类都保持实例化状态.与Activity不同,配置改变不会导致应用程序重启.通过继承Application类,可以完成一下3项工作: · 对Android运行时广 ...

  10. 如何使用TcpDump抓取远程主机的流量并回显到本地的WireShark上

    ssh -t username@remoteip "echo rootpassword | sudo -S tcpdump -i eth0 -A '(tcp[((tcp[12:1] & ...