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 : ...
随机推荐
- angularjs表单
<form ng-app="myApp" ng-controller="validateCtrl" name="myForm" nov ...
- 【Vmware】VirtualBox下虚拟机的网络配置
1.VirtualBox的提供了四种网络接入模式,它们分别是:1.NAT 网络地址转换模式(NAT,Network Address Translation)2.Bridged Adapter ...
- 简单的javasrcipt选项卡
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta char ...
- git提交失败
git push "提示:更新被拒绝,因为您当前分支的最新提交落后于其对应的远程分支."的解决办法 本地已存在项目,需要先获取远端更新并与本地合并,再git push具体操作如下: ...
- C语言的常用字符串操作函数(一)
一直做的是单片机相关的程序设计,所以程序设计上更偏向底层,对于字符串的操作也仅限于液晶屏幕上的显示等工作,想提高下字符串操作的水平,而不是笨拙的数组替换等方式,翻看帖子发现C语言的字符串操作函数竟然这 ...
- Python 正则表达式学习笔记
本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程 ...
- memcached + php 扩展 for ubuntu
1.安装memcached apt-get install memcached 2.安装php memcached 扩展 apt-get install php5-memcache 3.启动memca ...
- C语言_error_MSB8031
关于Visual Studio 2013 编译 multi-byte character set MFC程序出现 MSB8031 错误的解决办法 Visual Studio 2013 编译旧的 mul ...
- JAVA序列化与反序列化三种格式存取(默认格式、XML格式、JSON格式)
什么是序列化 java中的序列化(serialization)机制能够将一个实例对象的状态信息写入到一个字节流中,使其可以通过socket进行传输.或者持久化存储到数据库或文件系统中:然后在需要的时候 ...
- Entity Framework技巧系列之九 - Tip 35 - 36
提示35. 怎样实现OfTypeOnly<TEntity>()这样的写法 如果你编写这样LINQ to Entities查询: 1 var results = from c in ctx. ...