1.创建词典
1.1不可变词典NSDictionary
//字典初始化
NSDictionary *dict2 = [[NSDictionary alloc]initWithObjectsAndKeys:@"frankfan",@"name",@25,@"age", nil];//创建2,实例方法开辟空间并赋值
NSDictionary *dict3 = [NSDictionary dictionaryWithObject:@"frankfan" forKey:@"name"];//创建3
NSArray *keyArray = @[@"age",@"name"];
NSArray *valueArray = @[@25,@"xiaoming"];
NSDictionary *demoDict = [NSDictionary dictionaryWithObject:valueArray forKey:keyArray];
NSDictionary *dict4 = [NSDictionary dictionaryWithObjectsAndKeys:@"frankfan",@"name",@25,@"age", nil];//创建4,类方法直接赋值
//NSArray *people = @[xiaomingDict,xiaohongDict];
//数组是有序的,但字典是无序的
//创建不可变字典
NSDictionary *dict = @{@"id":@1,@"name":@"ming",@"sex":@"man",@"toys":@[@"toy1",@"toy2",@"toy3"]};//创建1,最简洁的
//初始化新字典,新字典包含otherDic
NSDictionary *dic = [NSDictionary dictionaryWithDictionary:otherDic];
//以文件内容初始化字典
NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:path];
1.2.可变数组NSMutableDictionary
//初始化可变字典
NSMutableDictionary *dic2 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"v1",@"key1",@"v2",@"key2",nil];
//初始化一个空的可变字典
NSMutableDictionary *dic1 = [NSMutableDictionary dictionary];
2.常用方法(判断获取元素数量、所有的key和value)
//获取字典数量
NSInteger count = [dic count];
//通过key获取对应的value对象
NSObject *valueObj = [dic objectForKey:@"key"];
//获取所有键的集合
NSArray *keys = [dic allKeys];
//获取所有值的集合
NSArray *values = [dic allValues];
//当面向字典开发或服务器返回的数据为字典时,应当判断字典内是否有对应的key值,从而避免返回key值为空而导致程序奔溃:
if([[dic allKeys] containsObject:@"key"])
{
cell.textLabel.text = [dict valueForKey:@"key"];
}
else
{
cell.textLabel.text = @"没有对应的key值";
}
3.添加、修改字典元素(NSMutableDictionary)
//向字典2中添加一个元素,若该Key已存在,则是修改该key的value值
[dic2 setValue:@"value3" forKey:@"key3"];
//向字典2对象中添加整个字典对象3
[dic2 addEntriesFromDictionary:dic3];
//将空字典1对象内容设置与字典2对象相同
[dic1 setDictionary:dic2];
4.查找元素元素
//已知key查找对应的obj
id value = [dict objectForKey:tmpkey];
//已知key查找对应的obj,简洁版
NSString *name1 = dict[@"name"];
//已知obj查找对应的key,obj能有多个对应的key
NSArray *keys = [dict allKeysForObject:@"xiaoming"];
5.删除字典元素
//将字典中key1对应的值删除
[dic1 removeObjectForKey@"key1"];
//根据指定的数组(key)移除字典1的内容,删除多个元素
NSArray *array = [NSArray arrayWithObjects:@"key1",@"key2", nil];
[dic2 removeObjectsForKeys:array];
//移除字典所有对象
[dic1 removeAllObjects];
6.遍历字典,排序key
6.1.遍历字典
//通过枚举类型枚举
NSDictionary *dict1 = @{@"name":@"xioaming",@"sex":@"man",@"age":@"25"};
//将字典的key转成枚举对象,用于遍历
NSEnumerator *enu = [dict1 keyEnumerator];
id key;
//遍历
while (key = [enu nextObject]) {
NSLog(@"key-->%@",key);
}
NSLog(@"------------");
//遍历(可以中途停止)
[dict1 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
if ([key isEqualToString:@"sex"]) {
*stop = YES;
}
NSLog(@"key:%@ obj:%@",key,obj);
}];
//快速枚举
for (id key in dic){
id obj = [dic objectForKey:key];
NSLog(@"%@", obj);
}
//一般枚举
NSArray *keys = [dic allKeys];
inr length = [keys count];
for (int i = 0; i < length;i++){
id key = [keys objectAtIndex:i];
id obj = [dic objectForKey:key];
NSLog(@"%@", obj);
}
6.2排序key
NSDictionary *dict2 = @{@"d":@"sdas",
@"a":@"d",
@"c":@"hjh",
@"b":@"33"};
//将key排序,按内容obj的首字母从小到大,数字放在字母前面
NSArray *array = [dict2 keysSortedByValueUsingSelector:@selector(compare:)];
NSLog(@"%@",array);
输出:
2015-09-12 10:54:53.257 dict[1229:34592] (
b,
a,
c,
d
)
//将key排序,按内容obj的长度从大到小
NSArray *array1 = [dict2 keysSortedByValueUsingComparator:^NSComparisonResult(id obj1, id obj2) {
if ([obj1 length] < [obj2 length]) {
return NSOrderedDescending;//降序,obj1放在obj2后面,即长度从大到小排序
}else if ([obj1 length] > [obj2 length]) {
return NSOrderedAscending;//升序,obj1放在obj2前面,即也是长度从大到小排序
}else {
return NSOrderedSame;
}
}];
NSLog(@"%@",array1);
输出:
2015-09-12 10:54:53.258 dict[1229:34592] (
d,
c,
b,
a
)