字典
字典就是关键字及其定义(描述)的集合。Cocoa中的实现字典的集合NSDictionary在给定的关键字(通常是一个NSString)下存储一个数值(可以是任何类型的对象)。即:存储方式为通过 键-值 对的方式来存放数据的一种无序集合。
字典也被称为散列表或关联数组。
不同于数组,字典使用的是键查询的优化存储方式。它可以立即找出要查询的数据,而不需要遍历整个数组进行查找。
一般通过key来操作object。某种意义上,对字典的运算实际上就是对key值的运算。
字典分为不可变字典NSDictionary和可变字典NSMutableDictionary。
1.初始化:方法用逗号
NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"one",@"1",@"two",@"2", nil];
NSDictionary *dictionary2 = [NSDictionary dictionaryWithObjectsAndKeys:@"one",@"1",@"two",@"2", nil];
2.字典的快速生成
//key : value
NSDictionary *dictionary3 = @{@"1":@"one",
@"2":@"two"};
NSLog(@"dic3 = %@",dictionary);
//简化适合不可变字典,不推荐可变字典使用。
3.查询一个对象
id object = [dictionary3 objectForKey:@"2"];
NSLog(@"object = %@",object);
4.取出所有的key
NSArray *keys = [dictionary3 allKeys];
NSLog(@"keys = %@",keys);
5.取出所有的对象
NSArray *values = [dictionary3 allValues];
NSLog(@"values = %@",values);
字典的遍历
//取出字典中所有的key或object,然后通过数组的遍历方法逐个取出对象:
NSArray *keys = [dictionary3 allKeys];
//for循环
for (int i = 0; i < keys.count; i ++) {
NSString *key = [keys objectAtIndex:i];
id object = [dictionary3 objectForKey:key];
NSLog(@"objec = %@",object);
}
// 快速枚举
for (id keys in dictionary3) {
NSLog(@"object1 = %@",keys);
id obj = [dictionary3 objectForKey:keys];
NSLog(@"obj = %@",obj);
}
//注意:键不可以重复,值可以
// 当设置的key值与原有key值重复时,会直接覆盖原来的键值对,这 也是更改字典数据的方法。
// 和数组一样,在遍历的同时不要对字典做出改动,那样或导致异常。
NSMutableDictionary
//初始化
NSMutableDictionary *mutableDic1 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"one",@"1",@"two",@"2",@"three",@"3",@"four",@"4", nil];
//增
[mutableDic1 setObject:@"five" forKey:@"5"];
NSLog(@"dic1 = %@",mutableDic1);
//删
[mutableDic1 removeObjectForKey:@"5"];
NSLog(@"dic1 = %@",mutableDic1);
//查
id object33 = [mutableDic1 objectForKey:@"4"];
NSLog(@"ob33 = %@",object33);
//改(根据key将原来的覆盖掉)
[mutableDic1 setObject:@"three three" forKey:@"3"];
NSLog(@"mudic1 = %@",mutableDic1);
//- setObject:forKey:方法,如果在字典中无法找到该key,则做添加处理。
NSSet
完全无序集合NSSet;
/*初始化如下,非常类似数组:分为NSSet和NSMutableSet*/
//用于去除重复数
NSSet *set1 = [NSSet setWithObjects:@"1",@"2",@"2",@"5",@"5",@"7", nil];
/*
里面的数据无法按照顺序取出,只能取出随即一个,或者一次性全部取出:
*/
//取一个
id object5 = [set1 anyObject];
NSLog(@"ob5 = %@",object5);
//取所有的
NSArray *setArr = [set1 allObjects];
NSLog(@"setArr = %@",setArr);
/*
NSSet对象中不能存放重复对象,如果出现重复,最终只会保留一个,NSSet也常用来清除其他集合中的重复对象
*/
//去除数组里面的重复数
NSArray *arr = @[@"1",@"2",@"2",@"5",@"5",@"7"];
NSSet *set2 = [NSSet setWithArray:arr];
NSArray *arr2 = [set2 allObjects];
NSLog(@"arr2 = %@",arr2);