一.字典
字典用于保存具有映射关系(key-value对)数据的集合.
特点:与数组不同, 字典靠key存取元素
key不能重复, value必须是对象.
键值对在字典中是无序存储的
字典分:不可变字典(NSDictionary)和可变字典(NSMutableDictionary)
1.不可变字典(NSDictionary)
字典一旦创建,键值对就不可以更改, 不可添加,不可删除.
仅能读取key或者value.
1). 创建&初始化
//使用遍历构造器创建和初始化 NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"王五", @"name", @"男", @"sex", @"瑜伽", @"hobby", nil]; //使用init创建和初始化 NSDictionary *dic1 = [NSDictionary alloc] initWithObjectsAndKeys:@"王五", @"name", @"男", @"sex", @"瑜伽", @"hobby", nil];
2). 通过key获取value
//输出sex所对应的value NSLog(@"%@", [dic objectForKey:@"sex"]);
3). 获取所有key, 获取所有value
for (NSInteger i = 0; i < dic.allKeys.count; i ++) { //先通过下标获取key NSString *key = [dic.allKeys objectAtIndex:i]; //再通过key获取value NSLog(@"%@", [dic objectForKey:key]); }
2. 可变字典(NSMutableDictionary)
NSDictionary的子类,可以使用父类方法
可以对管理的键值对进行增删改.
1). 创建&初始化
//使用遍历构造器创建和初始化 NSMutableDictionary *mdic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"王五", @"name", @"男", @"sex", @"瑜伽", @"hobby", nil]; //使用init创建和初始化 NSMutableDictionary *mdic1 = [NSMutableDictionary alloc] initWithObjectsAndKeys:@"王五", @"name", @"男", @"sex", @"瑜伽", @"hobby", nil]; //创建空得可变字典 NSMutableDictionary *mdic2 = [NSMutableDictionary dictionary];
2).添加&修改
//找到key值时修改,找不到的时候添加 [mdic setObject:@"王宁" forKey:@"name"]; [mdic setObject:@"男" forKey:@"sex"]; [mdic setObject:@"瑜伽" forKey:@"hobby"]; NSLog(@"%@", [mdic objectForKey:@"name"]);
3). 删除 removeObjectForKey
//删除了sex的键值对 [mdic removeObjectForKey:@"sex"];
4).遍历字典
for (NSInteger i = 0; i < mdic.allKeys.count; i ++) { NSString *key = [mdic.allKeys objectAtIndex:i]; NSLog(@"%@", [mdic objectForKey:key]); } //其中, mdic.allKeys 是获取所有的键值key
二. 集合
与数学中的集合一样,集合中的元素唯一.
存储的元素是无序的
存储元素必须是对象类型
iOS中用Set表示集合,分NSSet和NSMutableSet
1. 不可变集合
1). 创建&初始化
注意:集合注重的操作方式是判断是否包含,判断交集并集等
集合中的元素具有唯一性,若重复保留一个.
NSSet *set = [NSSet setWithObjects: @"1", @"2", @"3", @"4", nil]; //个数 NSLog(@"%ld", set.count); //获取任意一个元素值 NSLog(@"%@", [set anyObject]); //判断是否包含某个元素 NSLog(@"%@", [set containsObject:@"1"]);
2. 可变集合
1).创建&初始化
//可变集合 NSMutableSet *mset = [NSMutableSet setWithObjects:@"1", @"2", @"3", @"4", nil]; NSMutableSet *mset1 = [NSMutableSet setWithObjects: @"2", @"3", @"4",@"5", nil];
2).基本操作
//合并 [mset unionSet:mset1]; //交集 [mset intersectSet:mset1]; //添加 [mset addObject:@"9"]; //删除 [mset removeObject:@"4"];
3).个数问题
//可以判断重复元素个数 NSCountedSet *cset = [NSCountedSet setWithObjects:@"1", @"2", @"2", @"4", nil]; //元素个数 NSLog(@"%ld", cset.count); //重复元素个数 NSLog(@"%ld", [cset countForObject:@"2"]);
三.快速枚举
1.定义
for (<#type *object#> in <#collection#>) {} //1、object是遍历得到的元素对象。 2、collection是集合类型的对象:数组、字典、集合。
2.特点
数组枚举得到数组中的元素对象。
字典枚举得到字典中的key值。
集合枚举得到集合中的元素对象。
3. 快速枚举数组
NSArray *arr = [NSArray arrayWithObjects:@"1", @"2", @"2", @"4", nil]; //遍历打印 for (NSInteger i = 0; i < arr.count; i ++) { NSLog(@"%@", [arr objectAtIndex:i]); } //快速枚举 for (NSString *str in arr) { NSLog(@"%@", str); }
4.快速枚举字典
NSDictionary *dic111 = [NSDictionary dictionaryWithObjectsAndKeys:@"王宁", @"name", @"男", @"sex", @"瑜伽", @"hobby", nil]; //collection是集合类型的对象:数组,字典,集合. //遍历字典得到的是key for (NSString *key in dic111) { NSLog(@"%@", [dic111 objectForKey:key]); }
5.快速枚举集合
//注意!!!快速枚举 - 不要在forin中改变被遍历的collection NSSet *set1 = [NSSet setWithObjects: @"1", @"2", @"3", @"4", nil]; for (NSString *str in set1) { NSLog(@"%@", str); }
四.数组快速排序
1.可变数组
//可变数组排序 NSMutableArray *arr1 = [NSMutableArray arrayWithObjects:@"a", @"d", @"c", @"b", nil]; //遍历 [arr1 sortUsingSelector:@selector(compare:)]; //输出 for (NSInteger i = 0; i < arr1.count; i ++) { NSLog(@"%@", [arr1 objectAtIndex:i]); }
2.不可变数组
NSArray *arr11 = [NSArray arrayWithObjects:@"1", @"4", @"2", @"3", nil]; NSArray *sortArr = [arr11 sortedArrayUsingSelector:@selector(compare:)]; //输出 for (NSInteger i = 0; i < sortArr.count; i ++) { NSLog(@"%@", [sortArr objectAtIndex:i]); }