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 : ...
随机推荐
- js 日期格式化 函数
function formatDate(date,format){ var paddNum = function(num){ num += ""; return num.repla ...
- velocity 高亮显示
velocity模板在eclipse中高亮显示的链接 http://download.eclipse.org/eclipse/updates/4.4http://veloeclipse.googlec ...
- why do we need virtual methods in C++?
http://stackoverflow.com/questions/2391679/why-do-we-need-virtual-methods-in-c Basic idea: when mark ...
- JPA 系列教程10-双向一对一关联表
双向一对一关联表的ddl语句 CREATE TABLE `t_person` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(255 ...
- redis的主从复制与哨兵
主从复制的关键字是slaveof,有三种方法可以让一个redis数据库变成另一个redis数据库的从数据库: 1.修改redis的配置文件,添加#slaveof <masterip> &l ...
- do循环的100米自由落体
#include "stdio.h" void main() { float h=100.0,sum=100.0; ; do { sum=sum+h; h=h/; g++; }); ...
- 关于个人网站选择虚拟主机还是VPS服务器的讨论
还记得当初才开始学习建站的时候,选择的第一款虚拟主机是全HTML的主机,那时候的虚拟主机还分为HTML或者是ASP,PHP的都很少,在国内接触的学习较多还是以ASP为主,PHP是最近几年才开始流行.如 ...
- ios ViewController的生命周期分析和基本使用逻辑
按结构可以对iOS的所有ViewController分成两类:1.主要用于展示内容的ViewController,这种ViewController主要用于为用户展示内容,并与用户交互,如UITable ...
- 关于C++中字符的转换
VS的工程属性中我们常会设置Character Set:
- Code Blocks 多文件联合编译
code::blocks是一款据说灰常强大的IDE,以前虽然也经常使用,但一没用过高度功能,二来没用它写过工程性的东西,简单点说就是一个以上的源文件并且加入其他非标准的头文件,今天想做一个多文 ...