day5: 字典、集、数组排序:字典类、集合类、数组数组排序、字典、集合的快速遍历、数组排序
2015-08-21 18:09
375 查看
集合有三种 NSArray NSDictionary NSSet
NSArray:有序,元素可以重复,通过索引来访问里面的数据
NSMutableArray: 通过索引来访问(读取与写入)里面的数据
NSDictionary: 无序:指的是我们初始化时跟它的存储顺序是不一样的
有序:key是按ACSII码表的顺序来存入的
NSMutableDictionary:
NSSet 无序,元素是不重复的,通过anyObject来访问一个元素,不是我们所能控制的
NSMutableSet 添加和删除元素
NSCountedSet 记录元素重复次数,最主要的功能是去除重复元素。
NSArray NSDictionary 两个有语法糖
NSSet 没有语法糖
可变字典和不可变字典都是由键值对组成的数据集合,
数组与字典的区别:
相同点:
都是数据集合
都是有序集合
不可变数组和不可变字典 都有语法糖
数组:@[obj1,obj2,obj3] 字典:@{key1:value1,key2:value2}
不同点:
数组中元素可以重复,字典中key不可以重复,value可以重复;
数组通过下标或值查找,字典通过key查找,
数组值可以为空,字典对象键值不可以为空,如需加入控制可以加入NSNULL对象
//-------不可变字典 NSDictionary--------
不可变字典 NSDictionary
字典的初始化1
initWithObjectsAndKeys:
字典的初始化2
initWithObjects:forKeys:
字典的初始化3
dictionaryWithObjectsAndKeys:
字典的初始化4
dictionaryWithObjects:forKeys:
获取所有的key
allKeys
获取所有的值value
allValues
//--------可变的字典 NSMutableDictionary--------
可变字典的初始化
dictionaryWithObjects:forKeys:
修改键值对 和 添加键值对
setObject:forkey:
通过key来删除键值对
removeObjectForKey
删除字典里所有对象
removeAllObjects
//-------NSSet NSMutableSet常用方法总结 ---------
NSSet是一个无序集合 在内存中存储是不连续的,去除数组中重复元素
NSSet与NSArray NSSet搜索元素比NSArray效率高,因为NSSet用到了Hash算法
NSSet,NSArray都是类,只能添加cocoa对象,如果需要加入基本数据类型(int,float,BOOL,double等),需要将数据封装成NSNumber类型。
NSSet 常用方法总结
+(id)setWithObjects:obj1,obj2,...nil 使用一组对象创建新的集合
-(id)initWithObjects:obj1,obj2,....nil 使用一组对象初始化新分配的集合
-(NSUInteger)count 返回集合成员个数
-(BOOL)containsObject:obj 确定集合是否包含对象 obj
-(BOOL)member:obj 确定集合是否包含对象 obj
-(NSEnumerator*)objectEnumerator 返回集合中所有对象到一个 NSEnumerator 类型的对象
-(BOOL)isSubsetOfSet:nsset 判断集合是否是NSSet的子集
-(BOOL)intersectsSet:nsset 判断两个集合的交集是否至少存在一个元素
-(BOOL)isEqualToSet:nsset 判断两个集合是否相等
NSMutableSet 常用方法总结
-(id)setWithCapcity:size 创建一个有size大小的新集合
-(id)initWithCapcity:size 初始化一个新分配的集合,大小为size
-(void)addObject:obj 添加对象 obj 到集合中
-(void)removeobject:obj 从集合中删除对象 obj
-(void)removeAllObjects 删除集合中所有对象
-(void)unionSet:nsset 将nsset的所有元素添加到集合
-(void)minusSet:nsset 从集合中去掉所有的NSSet 的元素
-(void)interectSet:nsset 集合和NSSet 做交集运算
main.m
NSArray:有序,元素可以重复,通过索引来访问里面的数据
NSMutableArray: 通过索引来访问(读取与写入)里面的数据
NSDictionary: 无序:指的是我们初始化时跟它的存储顺序是不一样的
有序:key是按ACSII码表的顺序来存入的
NSMutableDictionary:
NSSet 无序,元素是不重复的,通过anyObject来访问一个元素,不是我们所能控制的
NSMutableSet 添加和删除元素
NSCountedSet 记录元素重复次数,最主要的功能是去除重复元素。
NSArray NSDictionary 两个有语法糖
NSSet 没有语法糖
可变字典和不可变字典都是由键值对组成的数据集合,
数组与字典的区别:
相同点:
都是数据集合
都是有序集合
不可变数组和不可变字典 都有语法糖
数组:@[obj1,obj2,obj3] 字典:@{key1:value1,key2:value2}
不同点:
数组中元素可以重复,字典中key不可以重复,value可以重复;
数组通过下标或值查找,字典通过key查找,
数组值可以为空,字典对象键值不可以为空,如需加入控制可以加入NSNULL对象
//-------不可变字典 NSDictionary--------
不可变字典 NSDictionary
字典的初始化1
initWithObjectsAndKeys:
字典的初始化2
initWithObjects:forKeys:
字典的初始化3
dictionaryWithObjectsAndKeys:
字典的初始化4
dictionaryWithObjects:forKeys:
获取所有的key
allKeys
获取所有的值value
allValues
//--------可变的字典 NSMutableDictionary--------
可变字典的初始化
dictionaryWithObjects:forKeys:
修改键值对 和 添加键值对
setObject:forkey:
通过key来删除键值对
removeObjectForKey
删除字典里所有对象
removeAllObjects
//-------NSSet NSMutableSet常用方法总结 ---------
NSSet是一个无序集合 在内存中存储是不连续的,去除数组中重复元素
NSSet与NSArray NSSet搜索元素比NSArray效率高,因为NSSet用到了Hash算法
NSSet,NSArray都是类,只能添加cocoa对象,如果需要加入基本数据类型(int,float,BOOL,double等),需要将数据封装成NSNumber类型。
NSSet 常用方法总结
+(id)setWithObjects:obj1,obj2,...nil 使用一组对象创建新的集合
-(id)initWithObjects:obj1,obj2,....nil 使用一组对象初始化新分配的集合
-(NSUInteger)count 返回集合成员个数
-(BOOL)containsObject:obj 确定集合是否包含对象 obj
-(BOOL)member:obj 确定集合是否包含对象 obj
-(NSEnumerator*)objectEnumerator 返回集合中所有对象到一个 NSEnumerator 类型的对象
-(BOOL)isSubsetOfSet:nsset 判断集合是否是NSSet的子集
-(BOOL)intersectsSet:nsset 判断两个集合的交集是否至少存在一个元素
-(BOOL)isEqualToSet:nsset 判断两个集合是否相等
NSMutableSet 常用方法总结
-(id)setWithCapcity:size 创建一个有size大小的新集合
-(id)initWithCapcity:size 初始化一个新分配的集合,大小为size
-(void)addObject:obj 添加对象 obj 到集合中
-(void)removeobject:obj 从集合中删除对象 obj
-(void)removeAllObjects 删除集合中所有对象
-(void)unionSet:nsset 将nsset的所有元素添加到集合
-(void)minusSet:nsset 从集合中去掉所有的NSSet 的元素
-(void)interectSet:nsset 集合和NSSet 做交集运算
main.m
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { // //-------不可变字典 NSDictionary-------- //字典的初始化1 NSDictionary * dic1 = [[NSDictionary alloc]initWithObjectsAndKeys:@"zhangsan",@"HighHeight",@"lisi",@"strongest", nil]; NSLog(@"%@",dic1); //字典的初始化2 NSDictionary * dic2 = [[NSDictionary alloc]initWithObjects:@[@"zhangsan",@"lisi"] forKeys:@[@"highHeight",@"strongest"] ]; NSLog(@"%@",dic2); //字典的初始化3 NSDictionary *dic3 = [NSDictionary dictionaryWithObjectsAndKeys:@"zhangsan",@"highHeight",@"lisi",@"strongest", nil]; NSLog(@"%@",dic3); //字典的初始化4 NSDictionary *dic4 = [NSDictionary dictionaryWithObjects:@[@"松下",@"仓井"] forKeys:@[@"Japan",@"World"]]; NSArray * keys = [dic4 allKeys]; //获取所有key NSArray * values = [dic4 allValues]; //获取所有value NSLog(@"%@ %@",keys,values); //字典对象只能读取,不能写入 NSString *value2 = dic4[@"xa"]; NSLog(@"value2 = %@",value2); //dic4[@"xa"]=@"bobo"; //只能读,不能写 //--------可变的字典 NSMutableDictionary-------- NSMutableDictionary *mDic = [NSMutableDictionary dictionaryWithObjects:@[@"kunlin",@"AngleBaby"] forKeys:@[@"jay",@"huangxiaomin"]]; NSLog(@"mDic = %@",mDic); /*setObject:forkey:修改键值对 和 添加键值对 添加键值对 (怎么样可以让数组里的汉子打印出来不是unicode码) 如果key值在字典里没有就是添加; 如果key值在字典里存在,那么调用这个方法时就是修改。 */ [mDic setObject:@"naichamei" forKey:@"liuqiangdong"]; NSLog(@"mDic = %@",mDic); //removeObjectForKey 通过key来删除键值对 [mDic removeObjectForKey:@"jay"]; NSLog(@"mDic = %@",mDic); //removeAllObjects 删除字典里所有对象 // [mDic removeAllObjects]; // NSLog(@"mDic = %@",mDic); //for循环 来遍历字典 //遍历方法1: NSArray * keys2 = [mDic allKeys]; for (int i=0; i<[keys2 count]; i++) { NSString * key = keys2[i]; NSString * value = mDic[key]; NSLog(@"key = %@, value = %@",key,value); } //遍历方法2 for (id obj in mDic) { NSLog(@"key = %@ value = %@",obj,[mDic objectForKey:obj]); } //-------NSSet的常用方法 ------- // NSSet * set = [[NSSet alloc]initWithObjects:@"bobo",@"huihui",@"haohao", nil]; NSLog(@"set = %@",set); //类方法 NSSet * set2 = [NSSet setWithObjects:@"bobo",@"huihui",@"haohao", nil]; NSLog(@"set2 = %@",set2); //NSSet 对象中打印出来的内容不是我们所写的顺序 //NSSet 存储是无序的 //集合中元素是无需的 //集合中元素的个数 NSUInteger setCount = [set2 count]; NSLog(@"setCount = %ld",setCount); //获取元素 随机取出一个元素 //anyObject 返回最方便取出的元素,不会保证是随机的 NSString *nameStr = [set2 anyObject]; NSLog(@"nameStr = %@",nameStr); //是否包含某个对象 BOOL isContain = [set2 containsObject:@"haohao"]; NSLog(@"isContain = %d",isContain); //三种集合:NSLog输出格式 NSArray *arr = @[@"zero",@"hour"]; NSLog(@"arr = %@",arr); NSDictionary *dic = @{@"Japan":@"Songxia",@"World":@"WenHua"}; NSLog(@"dic = %@",dic); NSSet * set3 = [NSSet setWithObjects:@"US",@"UK",@"UB", nil]; NSLog(@"set3 = %@",set3); //--------NSMutableSet--------- NSMutableSet * mSet = [NSMutableSet setWithObjects:@"井上",@"田中",@"海里", nil]; //NSMutableSet所特有的消息 //特性1、添加元素 [mSet addObject:@"松下"]; [mSet addObject:@"山本"]; [mSet addObject:@"柳下"]; NSLog(@"mSet = %@",mSet); //特性2、移除元素 [mSet removeObject:@"松下"]; NSLog(@"mSet = %@",mSet); //特性3、移除所有的元素 [mSet removeAllObjects]; NSLog(@"mSet = %@",mSet); //去除数组中重复的元素 NSArray * arr2 = @[@"a",@"b",@"c",@"b",@"a",@"c",@"a",@"a",]; NSLog(@"arr2 = %@",arr2); NSSet * set4 = [NSSet setWithArray:arr2]; NSLog(@"set4 = %@",set4); NSArray * arr3 = [set4 allObjects]; NSLog(@"arr3 = %@",arr3); //--------NSCountedSet--------- //setWithArray:统计数组中各元素的个数 NSCountedSet * countedSet = [NSCountedSet setWithArray:arr2]; NSLog(@"countedSet = %@",countedSet); //countForObject:返回集合中某元素的重复次数 NSUInteger repeat = [countedSet countForObject:@"a"]; NSLog(@"repeat = %lu",repeat); //-------for in 快速枚举,快速遍历-------- //遍历1、遍历数组中的元素 NSArray * arr5 = @[@"bobo",@"xiaocui",@"huihui"]; NSUInteger count = [arr5 count]; for (int i=0; i<count; i++) { NSLog(@"arr5 = %@",arr5[i]); } /* type 集合中的类型 object 实例变量名 collection 集合名 */ for (NSString * obj in arr5) { NSLog(@"obj = %@",obj); } //遍历2、遍历字典中的元素 NSDictionary * dic5 = @{@"天龙八部": @"萧峰",@"倚天屠龙记": @"张无忌",@"神雕侠侣": @"杨过",}; NSArray * keys3 = [dic5 allKeys]; NSUInteger count2 = [keys3 count]; for (int i=0;i<count2;i++) { NSLog(@"%@ = %@",keys3[i],dic5[keys3[i]]); } for (NSString * obj in dic5) { NSLog(@"%@ = %@",obj,dic5[obj]); } //遍历3、用Block列举字典中所有的key和value [dic5 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { NSLog(@"%@ = %@",key,obj); }]; NSMutableArray * names = [NSMutableArray arrayWithObjects:@"zhangsan",@"lisi",@"wangwu", nil]; //OC 数组升序排列:sortedArrayUsingSelector:@selector(compare:) NSArray * names2 = [names sortedArrayUsingSelector:@selector(compare:)]; NSUInteger count3 = [names count]; //第一层循环控制趟数 for (NSUInteger i=0; i<count3-1; i++) { for (NSUInteger j=0; j<count3-1-i; j++) { if ([names[j] compare:names[j+1]]<0) { [names exchangeObjectAtIndex:j withObjectAtIndex:j+1]; } } } for (NSUInteger i=0; i<count3; i++) { NSLog(@"name = %@",names[i]); } for (NSUInteger i=0; i<count3; i++) { NSLog(@"name = %@",names2[i]); } return 0; }
相关文章推荐
- js 数据存入数组
- 自然数的拆分
- Codeforces Round #286 (Div. 2) D. Mr. Kitayuta's Technology 强连通分量 有向图求环
- Sencha Touch自定义NavigationView
- HD 2899 Strange fuction 【二分】
- 九度oj 1117
- 【记录帖】svn常用命令
- oracle12创建用户授权和密码报:65096 公用用户名或角色无效
- keepalived+mysql双主实现数据库冗余
- RabbitMQSender
- iOS 9学习系列:如何使用ATS提高应用的安全性
- 听故事搞懂多线程开发-- 屎壳郎老板和它的收费公厕
- 数组名a与&a的区别
- 鼠标拖动出现直线碰撞器
- Centos中将openjdk切换为Oracle Jdk导致Tomcat无法正常启动的问题
- IOS XIB Cell自适应高度实现
- 读取shp属性表导出为excel表格和写入word文档
- android学习笔记之客户端与服务端保持session登录状态
- Windows文件换行符转Linux换行符
- axis2 1.5.5 + Websphere 8.0 ,FileUploadException 与 NoInitialContextException 的解决办法