//集合NSSet

//集合也是储存对象,和字典一样也是无序存储

//集合中里面的元素不能重复

//集合里面的元素可以随机取出

//用数组放到集合中

NSArray *a10 = @[p1 , p2 , p3 , p4 , p5];

NSSet *set1 = [NSSet setWithArray:a10];

//给集合放一个对象

NSSet *set2 = [NSSet setWithObject:p1];

//给集合放多个对象

//如果集合里面的元素相同了,会覆盖原来的那个

NSSet *set3 = [NSSet setWithObjects:p1 , p2 , p3 , p4 , nil];

//给集合放集合

NSSet *set4 = [NSSet setWithSet:set2];

NSLog(@"%@" , set4);

//  要打印集合中所有元素, 需要借助数组来完成

// 把集合里面的元素取出来 放大数组里面就可以循环打印

NSArray *array01 = [set3 allObjects];

for (int i = 0; i < [array01 count]; i++) {

NSLog(@"%@" , [array01 objectAtIndex:i]);

}

//既然集合里面的 元素是无序的,那么要想从集合中取出一个元素,这个元素肯定是随机的

//从集合里面随机取出一个元素

NSLog(@"*****************************************");

Person *p01 = [set3 anyObject];

NSLog(@"%@" , p01);

//能够放相同元素的集合

//NSCountedSet 集合中可以放相同的元素,并且能算出一个元素相同了多少次,也就是重复了多少次

NSCountedSet *set5 = [[NSCountedSet alloc] initWithObjects:p1 , p1 , p3 , p4 , p5  , p3 , p3 , p2  , p4 , p2 , nil];

//count 按照种类来分

NSLog(@"%ld" , [set5 count]);

//对集合中某一个元素种类计数

NSLog(@"%ld" , [set5 countForObject:p3]);

//可变集合

NSMutableSet *mset1 = [NSMutableSet setWithObjects:p5 , p3 , p2 , nil];

// 删除某个元素

[mset1 removeObject:p3];

[mset1 removeAllObjects];//删除多个元素

NSLog(@"%@" , mset1);

//三大容器总结

/*

一、相同点

都是容器 都能存储多个元素,存储的元素都必须是对象

二、不同点

1、特点

数组存储对象时有序的,元素可以重复

字典存在一一对应关系,键值对,key值必须唯一,不能重复

集合存储的院士是无序的,而且元素之间存在互异性

2、取值方面

数组 通过下标取值

字典 通过键值key进行取值

集合 通过anyObject随机取值

3、能否利用for循环

数组 直接利用for循环

字典 借助allkeys数组进行for循环遍历

集合 借助一个数组,把set集合中所有元素放进这个数组中

*/

NSArray *array02 = @[p2 , @"a" , p2 , @"b" , p1];

//循环打印数组所有元素,只打印字符串,不打印person对象

//isKindOfClass判断一个对象是否是某一类,或者这个类的子类

for (int i = 0; i < [array02 count];i++) {

id p = [array02 objectAtIndex:i];

//判断p是否是NSString类

if ([p isKindOfClass:[NSString class]]) {

// 如果是字符串久打印

NSLog(@"%@" , p);

}

}

//isMemberOfClass判断一个对象是否是一个类,不会判断子类

Student *s1 = [[Student alloc] initWithName:@"ddfdfjk" andAge:45];

Student *s2 = [[Student alloc] initWithName:@"dsfu" andAge:456];

NSArray *array03 = @[p2 , s1 , p2 , s2 , p1];

for (int i = 0; i < [array03 count];i++) {

id q = [array03 objectAtIndex:i];

//判断p是否是NSString类

if ([q isMemberOfClass:[Person class]]) {

// 如果是字符串久打印

NSLog(@"%@" , q);

}

}

NSSet 用法的更多相关文章

  1. NSArray / NSSet / NSDictory 三者的异同点

    NSArray / NSSet / NSDictory 三者的异同点 NSArray 是一个有序对象的一个集合.相当于一个队列存储,可以有重复的数进去. NSSet 比较典型的一个HASH表(集合)算 ...

  2. NSSet、NSMutableSet基本用法

    NSSet.NSMutableSet基本用法 在Foundation框架中,提供了NSSet类,它是一组单值对象的集合,且NSSet实例中元素是无序,同一个对象只能保存一个. 一.不可变集合NSSet ...

  3. 用法总结:NSArray,NSSet,NSDictionary

    用法总结:NSArray,NSSet,NSDictionary Foundation framework中用于收集cocoa对象(NSObject对象)的三种集合分别是: NSArray 用于对象有序 ...

  4. 用法总结:NSArray,NSSet,NSDictionary-备用

    Foundation framework中用于收集cocoa对象(NSObject对象)的三种集合分别是: NSArray 用于对象有序集合(数组)NSSet 用于对象无序集合      (集合)NS ...

  5. Objective-C:NSSet和NSMutbaleSet的用法

    #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { ...

  6. NSArray,NSMutable和NSSet,NSMutableSet和NSDictionary,NSMutableDictionary用法

    开始编写应用程序的代码时,可以利用大量的 Objective-C 框架.其中,为所有应用程序提供基本服务的 Foundation 框架尤为重要.Foundation 框架包括表示基本数据类型的值类(如 ...

  7. iOS多线程之8.NSOPeration的其他用法

      本文主要对NSOPeration的一些重点属性和方法做出介绍,以便大家可以更好的使用NSOPeration. 1.添加依赖 - (void)addDependency:(NSOperation * ...

  8. QuartZ2D __ 简单用法 1

    一. 简单做一个画板 1. 建立一个UIView类 2. 在.m里建立一个延展 3. 分别定义一个起点, 一个终点的结构体属性 . 在建立一个存储路径的数组 @interface DrawView ( ...

  9. iOS 线程安全之@synchronized的用法

    @synchronized(self)的用法: @synchronized 的作用是创建一个互斥锁,保证此时没有其它线程对self对象进行修改.这个是objective-c的一个锁定令牌,防止self ...

随机推荐

  1. 九度OJ 1195:最长&最短文本 (搜索)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3144 解决:1156 题目描述: 输入多行字符串,请按照原文本中的顺序输出其中最短和最长的字符串,如果最短和最长的字符串不止一个,请全部输 ...

  2. [转载]Hibernate如何提升数据库查询的性能

    目录(?)[-] 数据库查询性能的提升也是涉及到开发中的各个阶段在开发中选用正确的查询方法无疑是最基础也最简单的 SQL语句的优化 使用正确的查询方法 使用正确的抓取策略 Hibernate的性能优化 ...

  3. vMware存储:SAN配置基础

    VMware存储不仅仅是将LUN映射给物理服务器这么简单.VMware vSphere允许系统管理员在一个物理机上创建多个虚拟机. 潜在的hypervisor和vSphere ESXi,能够使gues ...

  4. linux 如何查找命令的路径

    linux 下,我们常使用 cd ,grep,vi 等命令,有时候我们要查到这些命令所在的位置,如何做呢? linux下有2个命令可完成该功能:which ,whereis which 用来查看当 前 ...

  5. python基础6 ----python函数

    python函数 一.函数的参数 1.函数的参数从调用的角度来讲可以分为形式参数和实际参数,也可叫形参和实参.     形参:变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元. ...

  6. mysql语句优化技巧

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引.2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引 ...

  7. ubuntu service XXX start启动报start: Rejected send message, 1 matche

    service cron restart命令报错如下: stop: Rejected send message, 1 matched rules; type="method_call&quo ...

  8. php匹配字符串中大写字母的位置

    变量名用的是驼峰,数据库中字段中的是下划线,现在想把userId等变量批量转换成user_id,怎么样获取大写字母在字符串中的位置?echo strtolower(preg_replace('/((? ...

  9. hbase shell-general(常规指令)

    hbase shell常规指令解释篇 1. status (显示集群状态,master,server情况,显示内容的详略程度可选) hbase(main)::> help 'status' Sh ...

  10. hdu 1701 (Binary Tree Traversals)(二叉树前序中序推后序)

                                                                                Binary Tree Traversals T ...