NSDictionary、NSMutableDictionary的基本用法

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
)

参考自http://seven-sally.lofter.com/post/19d861_5404fa

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值