Objective-C_字典、集合、数组排序
来源:互联网 发布:淘宝差评在哪里解释 编辑:程序博客网 时间:2024/05/29 18:52
- 一字典类
- 二集合类
- 三数组字典集合的快速遍历
- 四数组排序
- 五数组元素按照数值大小排序
一、字典类
字典⽤于保存具有映射关系(key-value对)数据的集合。对于“姓名:张三”来讲,key就是“姓名”,key对应的value是“张三”。一个key-value对认为是⼀个条目,字典是存储key-value对的容器。与数组不同,字典靠key存取元素。key不能重复,value必须是对象。键值对在字典中是无序存储的。字典也分为,不可变字典(NSDictionary)和可变字典(NSMutableDictionary)。
NSDictionary,不可变字典,继承NSObject。即字典一旦创建,键值对就不可更改,不可添加,不可删除。仅能读取key或者value。
/* 不可变字典 */ /* 创建对象 */ NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys: @"ZhangSan", @"name", @"Man", @"sex", @"18", @"age", @"130", @"weight", nil]; /* 输出字典 */ NSLog(@"%@", dic); /* 获取所有的Key值 */ [dic allKeys]; NSLog(@"%@", [dic allKeys]); /* 获取所有的Value值 */ [dic allValues]; NSLog(@"%@", [dic allValues]); /* 通过Key查询Value值 */ [dic objectForKey:@"name"]; NSLog(@"%@", [dic objectForKey:@"name"]); [dic valueForKey:@"name"]; NSLog(@"%@", [dic valueForKey:@"name"]); /* 遍历字典 */ NSArray *keyArr = [dic allKeys]; for (int i = 0; i < keyArr.count; i++) { NSString *keyStr = [keyArr objectAtIndex:i]; NSLog(@"%@", [dic objectForKey:keyStr]); } /* 快速遍历 */ for (NSString *key in dic) { NSLog(@"%@", [dic objectForKey:key]); } /* keyArr快速遍历 */ for (NSString *str in keyArr) { NSLog(@"%@", str); }
NSMutableDictionary,可变字典,继承NSDictionary。可以对管理的键值对进⾏行增、删、改。
/* 可变字典 */ NSMutableDictionary *mDic = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"LiSi", @"name", @"18", @"age", @"woman", @"sex", @"120", @"weight", nil]; for (NSString *key in mDic) { NSLog(@"%@", [mDic objectForKey:key]); } /* 增加键值对 */ [mDic setObject:@"170cm" forKey:@"height"]; [mDic setValue:@"volleyball" forKey:@"hobby"]; for (NSString *key in mDic) { NSLog(@"%@", [mDic objectForKey:key]); } /* 修改键值对 */ [mDic setObject:@"20" forKey:@"age"]; for (NSString *key in mDic) { NSLog(@"%@", [mDic objectForKey:key]); } /* 删除键值对 */ [mDic removeObjectForKey:@"hobby"]; for (NSString *key in mDic) { NSLog(@"%@", [mDic objectForKey:key]); }
二、集合类
集合类*NSSet,类似数学中集合的概念,具有确定性、无序性、互异性*。即集合中存储的元素必须是对象类型,存储的元素是无顺序的,存储的元素唯一。集合类也分为NSSet和NSMutableSet。
NSSet的示例代码如下:
/* 不可变Set */ /* 创建 */ NSSet *set = [NSSet setWithObjects:@"四平", @"长春", @"吉林", @"四平", nil]; /* 获取Set元素个数 */ NSLog(@"%lu", set.count); /* 获取Set中某一元素 */ NSLog(@"%@", [set anyObject]); /* 判断Set中是否包含某一个对象 */ if ([set containsObject:@"沈阳"]) { NSLog(@"有"); } else { NSLog(@"无"); } /* 遍历集合 */ for (NSString *str in set) { NSLog(@"%@", str); }
NSMutableSet的示例代码如下:
/* 可变集合 */ NSSet *set2 = [NSSet setWithObjects:@"DaLian", @"BeiJing", nil]; NSMutableSet *mSet = [NSMutableSet setWithSet:set2]; /* 合并两个集合 */ [mSet unionSet:set]; for (NSString *str in mSet) { NSLog(@"%@", str); } /* 相交两个集合 */ [mSet intersectSet:set]; /* 添加元素 */ [mSet addObject:@"通化"]; /* 删除元素 */ [mSet removeObject:@"BeiJing"]; for (NSString *str in mSet) { NSLog(@"*%@*", str); }
NSCountedSet是NSMutableSet的子类,能记录元素的重复次数。在NSSet的基础上添加了计数功能。
NSCountedSet的示例代码如下:
/* NSCountedSet类 */ NSArray *arr = [NSArray arrayWithObjects:@"Zhang", @"LiSi", @"LiSi", @"Wang", @"Wang", @"LiSi", nil]; NSCountedSet *countSet = [NSCountedSet setWithArray:arr]; /* 查看countSet元素个数 */ NSLog(@"%lu", countSet.count); /* LiSi计数 */ NSLog(@"%lu", [countSet countForObject:@"LiSi"]);
三、数组、字典、集合的快速遍历
for (<#type *object#> in <#collection#>) {}
- object是遍历得到的元素对象。
- collection是集合类型的对象:数组、字典、集合。
集合类型枚举的特点
- 数组枚举得到数组中的元素对象。
- 字典枚举得到字典中的key值。
- 集合枚举得到集合中的元素对象。
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys: @"ZhangSan", @"name", @"Man", @"sex", @"18", @"age", @"130", @"weight", nil]; /* 快速遍历 */ for (NSString *key in dic) { NSLog(@"%@", [dic objectForKey:key]); }
四、数组排序
数组排序取决于判断条件,判断条件决定了排序的⽅式(升序、降序)。iOS为数组提供了排序⽅法,同时提供了接口让我们传递判断条件。
NSMutableArray *mArr = [NSMutableArray arrayWithObjects:@"3", @"2", @"1", @"4", nil]; /* 可变数组排序 */ /* @selector --> 方法选择器, 获取方法名的意思. * compare: --> 数组中元素的方法(元素是字符串, compare是字符串的一个方法) */ [mArr sortUsingSelector:@selector(compare:)]; NSLog(@"%@", mArr); /* 不可变数组排序 */ NSArray *arr = [NSArray arrayWithObjects:@"4", @"2", @"1", @"3", nil]; NSArray *sortArr = [arr sortedArrayUsingSelector:@selector(compare:)]; NSLog(@"%@", sortArr);
五、数组元素按照数值大小排序
数组中存储的元素是对象类型,如果存储的元素都是数值对象,按照上述方法排序就不能得到正确的结果。因此,需要使用NSNumberFormatter将字符串转化为NSNumber对象。具体实现代码如下:
#pragma mark - 数值数组排序#if 1 NSArray *arr = @[@"1", @"12", @"122", @"67", @"50", @"666"]; NSMutableArray *numArr = [NSMutableArray array]; for (NSString *string in arr) { // NSNumberFormatter格式转化 NSNumberFormatter *format = [[NSNumberFormatter alloc] init]; // NSString 转成 NSNumber NSNumber *num = [format numberFromString:string]; [numArr addObject:num]; } // 根据数组里元素的类型来调用相应的方法, 相当于排序中条件判断 NSLog(@"%@", [numArr sortedArrayUsingSelector:@selector(compare:)]);#endif
- Objective-C_字典、集合、数组排序
- Objective-C_数据字典,集合
- 字典,集合,数组排序
- 字典、集合、数组排序
- 5、字典、集合、数组排序
- #Objective-C 经典字典数组排序 - 省市区
- #Objective-C 经典字典数组排序 - 省市区
- OC第五天-字典,集合,数组排序
- day5: 字典、集、数组排序:字典类、集合类、数组数组排序、字典、集合的快速遍历、数组排序
- Objective - C 字符串 数组 字典 集合的基本使用
- OC学习第五天_字典、集、数组排序:字典类、集合类、数组数组排序、字典、集合的快速遍历、数组排序
- Objective-C---5---字典,集合
- objective-C基础----字典,集合
- #Objective - C - sixth-Day 数组排序及集合遍历
- c_数组
- 数组,字典,集合
- OC数组字典集合
- OC--数组、字典、集合
- vim visual操作备忘
- hdu1198并查集
- 专访罗升阳:老罗的Android之旅
- A Simple Problem with Integers
- 大数模板(读入字符串,c++重载)
- Objective-C_字典、集合、数组排序
- [笔记][Java7并发编程实战手册]2.5使用Lock实现同步一
- 零基础学python-目录
- 控制线程顺序执行
- 异常图结构
- leetcode 92: Reverse Linked List II
- 怎么快速的向织梦添加文章
- 怎样学好计算机
- NOJ1032 三角形数(大数模板)