ios 集合总结
NSArray 用于对象有序集合(相当于是数组)
它有两个限制:
1. 它只能存储objective-c的对象,但不能存储C中的基本数据类型,如int , float, enum, struct等。
2.不能存储nil(对象的零值或NULL值);【因为在创建NSArray时,要在列表结尾添加nil代表列表结束。】
NSSet 用于对象无序集合
NSDictionary 用于键值映射 以上三种集合类是不可变的(一旦初始化后,不能再动态的增加或删除元素),如果需要用到可变集合,则需要用到下面几个类:
NSMutableArray
NSMutableSet
NSMutableDictionary
实例DEMO:
1:NSArray 初始化和遍历迭代
()NSArray的初始化
NSArray的便利初始化函数: -(id) initWithObjects : (id) firstObject, ....;
NSArray的便利构造器: +(id) arrayWithObjects: (id) firstObject, ...;
demo:
//NSArray的便利初始化
NSArray *array1 = [[NSArray alloc] initWithObjects:@"aaa", @"bbb", @"ccc", nil];
//NSArray的便利构造器
NSArray *array2 = [NSArray arrayWithObjects:@"", @"", @"", nil];
()获取数组元素的个数和数组的元素
//获取数组元素的个数和元素
int count = (int)[array1 count];
//获取相应索引的元素
id element = [array1 objectAtIndex:];
NSLog(@"array1_count = %d, array[0] = %@", count, element);
()迭代:
//封装遍历数组的函数
void array_display(id array)
{
for (int i = ; i < [array count]; i++) {
id temp = [array objectAtIndex:i];
NSLog(@"%@", temp);
}
}
2:NSMutableArray初始化和遍历迭代
.可变数组:NSMutableArray
NSArray的容量是固定的,而NSMutableArray的容量是可变的,我们可以在NSMutableArray实例化的时候先初始化一个容量,不过这个容量不是固定的,不够的时候会自动增加。NSMutableArray是NSArray的子类,是对NSArray的一个扩充。
() NSMutableArray的初始化
NSMutableArray的便利初始化函数:-(id) initWithCapacity : (NSUInteger) numItems;
NSMutableArray的便利构造器:+(id) arrayWithCapacity: (NSUInteger) numItems;
demo:
//NSMutableArray的便利初始化
NSMutableArray *array3 = [[NSMutableArray alloc] initWithCapacity:];
//NSMutableArray的便利构造器
NSMutableArray *array4 = [NSMutableArray arrayWithCapacity:];
()元素的添加和删除
增加元素: -(void) addObject: (id) anObject; --往数组的尾部添加元素
删除全部内容: -(void) removeAllObjects;
删除最后一个元素: -(void) removeLastObject;
通过索引删除元素: -(void) removeObjectAtIndex: (NSUInteger) index;
删除任意一个元素: -(void) removeObject : (id)object;
demo:
//初始化NSMutableArray
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"", @"", @"", nil];
//添加元素
[array addObject:@""];
//移除元素
[array removeObject:@""];
//移除最后一个元素
[array removeLastObject];
//按照索引删除元素
[array removeObjectAtIndex:];
array_display(array);
删除任意一个元素: -(void) removeObject : (id)object;
//初始化NSMutableArray
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"", @"", @"", nil];
//添加元素
[array addObject:@""];
//移除元素
[array removeObject:@""];
//移除最后一个元素
[array removeLastObject];
//按照索引删除元素
[array removeObjectAtIndex:];
array_display(array);
3:数组遍历
()要通过NSEnumerator来遍历数组首先得通过-(NSEnumerator *) objectEnumerator来得到枚举器;通过枚举其中的nextObject来获取对象 emo:如下 //迭代遍历数组
//获取枚举器
NSEnumerator *enumerator = [array objectEnumerator];
//临时变量
id obj;
while (obj = [enumerator nextObject]) {
NSLog(@"%@", obj);
} ()快速遍历法,相当于PHP中的foreach的用法 for(id obj in array)
{
NSLog(@"%@", obj);
}
4:字典
//不可变字典的初始化
NSDictionary *dictionay = [NSDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil];
id value = [dictionay objectForKey:@"key1"];
NSLog(@"key1 => %@", value); //封装遍历字典的函数(字典的遍历方法是通过字典里的-(NSArray *)allKeys获取所有的key存入数组中然后通过遍历数组获取key对应的value,)
void dictionary_display(id dictionay)
{
NSArray *keys = [dictionay allKeys];
for (id obj in keys) {
NSLog(@"%@ => %@", obj, [dictionay objectForKey:obj]);
}
} //可变字典NSMutableDictionary 在使用可变字典NSMutableDictionary时可以先给可变字典初始化一个空间,如果不够的话会自动增加 给可变字典分配初始化空间: +(id) dictionaryWithCapacity : (NSUInteger) num; 给可变字典添加对象:-(void) setObject(id) obj forKey(id) aKey; 根据关键字删除对象:-(void) removeObjectForKey : (id) aKey; 删除字典中的所有数据: -(void) removeAllObjects; 代码如下: NSMutableDictionary *mulDictionary = [NSMutableDictionary dictionaryWithCapacity:];
//添加值
[mulDictionary setObject:@"value1" forKey:@"key1"];
[mulDictionary setObject:@"value2" forKey:@"key2"];
[mulDictionary setObject:@"value3" forKey:@"key3"];
[mulDictionary setObject:@"value4" forKey:@"key4"];
//通过键删除值
[mulDictionary removeObjectForKey:@"key4"];
dictionary_display(mulDictionary);
5:set
.不可变集合NSSet
()NSSet的初始化和其他集合类一样也有其对应的便利初始化方法和便利构造器,
便利初始化方法:-(id) initWithObjects: (id) firstObject, ...;
便利构造器:+(id) setWithObjects: (id) firstObject, ...;
()NSSet中也有-(NSUInteger) count 来获取元素的对象
() 获取集合中的元素
获取全部的集合元素,以数组的形式返回:-(NSArray *) allObjects;
随进获取集合中的元素:-(id) anyObject;
()判断两个Set是否相同 : - (BOOL) isEqualToSet: (NSSet *) otherSet;
()判断一个元素是否在本集合中 -(BOOL) member: (id) obj;
//set集合的操作
//便利初始化函数
NSSet *set1 = [[NSSet alloc] initWithObjects:@"aa", @"bb", @"cc", @"dd", nil];
//便利构造器
NSSet *set2 = [NSSet setWithObjects:@"AA", @"BB", @"CC", nil];
//获取集合中元素的个数
int count = (int) [set1 count];
NSLog(@"set1里面的元素的个数为:%d", count);
//遍历集合:把set集合转换为数组然后进行遍历
NSArray *setToArray = [set2 allObjects];
array_display(setToArray);
//随机获取Set中元素
id element = [set1 anyObject];
NSLog(@"随机获取其中的值%@", element);
//比较两个Set是否相等
if ([set1 isEqualToSet:set2] == NO) {
NSLog(@"set1 != set2");
}
//查看一个元素是否在一个set中
if ([set1 member:@"aa"]) {
NSLog(@"aa 在set1中");
}
、可变Set: NSMutableSet
.可变集合的实例化和初始化
便利初始化函数: -(id) initWithCapacity :(NSUInteger) numItems;
便利构造器:+(id) setWithCapacity: (NSUInteger) numItems;
.往可变集合中添加元素
-(void) addObject : (id) object;
.删除集合中的对象
-(void) removeAllObjects; 删除所有的对象;
-(void) removeObjects: (id) object 删除其中某一个对象;
实例:
//便利初始化函数分配大小
NSMutableSet *mutableSet1 = [[NSMutableSet alloc] initWithCapacity:];
NSMutableSet *mutableSet2 = [NSMutableSet setWithCapacity:];
//添加元素
[mutableSet1 addObject:@"aaa"];
[mutableSet1 addObject:@"BBB"];
[mutableSet1 addObject:@"bbb"];
//删除元素
[mutableSet1 removeObject:@"BBB"];
//遍历Set
NSArray *setArray = [mutableSet1 allObjects];
array_display(setArray);
ios 集合总结的更多相关文章
- iOS 集合的深复制与浅复制
概念 对象拷贝有两种方式:浅复制和深复制.顾名思义,浅复制,并不拷贝对象本身,仅仅是拷贝指向对象的指针:深复制是直接拷贝整个对象内存到另一块内存中. 一图以蔽之 再简单些说:浅复制就是指针拷贝:深复制 ...
- 【推荐】iOS集合视图的可重新排序的layout
在实际项目中你或许会遇到在一个集合视图中移动一项到另外一个位置,那么此时我们需要对视图中的元素进行重新排序,今天推荐一个很好用的第三方类LXReorderableCollectionViewFlowL ...
- IOS集合NSSet与NSMutableSet知识点
NSSet在实际应用中与NSArray区别不大,但是如果你希望查找NSArray中的某一个元素,则需要遍历整个数组,效率低下.而NSSet在查找某一特定的元素的时候则是根据hash算法直接找到此元素的 ...
- iOS集合视图单元格高亮和选中的区别
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交 ...
- ios集合
Foundation framework中用于收集cocoa对象(NSObject对象)的三种集合分别是: NSArray 用于对象有序集合(数组) NSSet 用于对象无序集合 (集合) NSDic ...
- 李洪强iOS经典面试题上
李洪强iOS经典面试题上 1. 风格纠错题 修改完的代码: 修改方法有很多种,现给出一种做示例: // .h文件 // http://weibo.com/luohanchenyilong/ / ...
- 招聘一个靠谱的iOS》面试题参考答案(上)
说明:面试题来源是微博@我就叫Sunny怎么了的这篇博文:<招聘一个靠谱的 iOS>,其中共55题,除第一题为纠错题外,其他54道均为简答题. 博文中给出了高质量的面试题,但是未给出答案, ...
- 《招聘一个靠谱的iOS》面试题参考答案(上)
说明:面试题来源是微博@我就叫Sunny怎么了的这篇博文:<招聘一个靠谱的 iOS>,其中共55题,除第一题为纠错题外,其他54道均为简答题. 博文中给出了高质量的面试题,但是未给出答案, ...
- iOS开发面试题整理 (三)
1. 风格纠错题 修改完的代码: typedef NS_ENUM(NSInteger, CYLSex) { CYLSexMan, CYLSexWoman }; @interface CYLUser : ...
随机推荐
- FreeBSD安装桌面环境
安装Xorg cd /usr/ports/x11/xorg-minimal make install clean 或 pkg install xorg-minimal 如果最小化安装xorg-serv ...
- redis高级实用特性(1)
1.安全性 2.主从复制 3.事务处理 4.持久化机制 5.发布订阅消息 6.虚拟内存的使用 安全性:设置客户端连接后进行任何其他指定前需要使用的密码 警告:因为redis速度相当快,所以在一台比较好 ...
- 菲菲更名宝贝(批量更名软件) v8.0 绿色版
软件名称: 菲菲更名宝贝(批量更名软件)软件语言: 简体中文授权方式: 免费软件运行环境: Win7 / Vista / Win2003 / WinXP 软件大小: 1.5MB图片预览: 软件简介:菲 ...
- linux yum安装mongodb
1.yum -y install mongodb-server mongodb 2.service mongod start #启动mongodb 服务 3. ...
- Linux Ubuntu 14.04安装LAMP(Apache+MySQL+PHP)网站环境
从虚拟主机到VPS/服务器的过度,对于普通的非技术型的站长用户来说可能稍许有一些困难,麦子建议我们如果能够在虚拟主机环境中满足建站需要的, 还是用虚拟主机比较好.除非我们真的有需要或者希望从虚拟主机过 ...
- NEU OJ 1651 Great number
循环节是2000000016 字符串读入,用一下高精度对2000000016取个模,用一下快速幂就可以算出答案了. #include <cstdio> #include <iostr ...
- 第十四章:使用CSS3进行增强
1.为不支持某些属性的浏览器使用polyfill:如果想弥合较弱的浏览器和较强的浏览器之间的功能差异,可以使用polyfill(通常又称作垫片),通常用js实现.但是有些较弱的浏览器运行JS的速度要慢 ...
- 十一章:用CSS进行布局
本章重点:盒模型与元素浮动. 盒模型: 1.CSS处理网页时,它认为每个元素都包含在一个不可见的盒子里.这就是众所周知的盒模型,这里的盒子由内容区域.内容区域周围的空间.内边距和外边缘和边框外面将元素 ...
- CentOS 7 rsync
CentOS 7 rsync 1)软件简介 Rsync 是一个远程数据同步工具,可通过 LAN/WAN 快速同步多台主机间的文件.Rsync 本来是用以取代rcp 的一个工具,它当前由 Rsync.s ...
- Oracle用户密码过期和用户被锁解决方法【转】
[原因/触发因素] 确定是由于Oracle11g中默认在default概要文件中设置了“PASSWORD_LIFE_TIME=180天”所导致. [影响和风险] 影响 密码过期后,业务进程连接数据库异 ...