NSDictionary与NSMutableDictionary的应用小结

一. NSDictionary(不可变字典)

1. 只能存储对象,第一次存入对象以后就不能再作修改
2. 字典是无序的,也就是说存入字典的元素顺序不是它在内存里面的真实顺序,属于链表存储
3. 字典初始化
    //键值和对象分别存入不同数组
    NSDictionary *dit0 = [[NSDictionary alloc] initWithObjects:@[@"A",@"B"] forKeys:@[@"1",@"2"]];
    NSLog(@"%@",dit0[@"1"]);
    NSDictionary *dit00 = [NSDictionary dictionaryWithObjects:@[@"a",@"b"] forKeys:@[@"1",@"2"]];
    NSLog(@"%@",dit00[@"2"]);

    //按照先对象后键值的顺序依次列出
    NSDictionary *dit1 = [[NSDictionary alloc] initWithObjectsAndKeys:@"C",@"3",@"D",@"4", nil];
    NSLog(@"%@",dit1[@"3"]);
    NSDictionary *dit11 = [NSDictionary dictionaryWithObjectsAndKeys:@"c",@"3",@"d",@"4", nil];
    NSLog(@"%@",dit11[@"4"]);

    //用一个字典初始化另一个字典
    NSDictionary *dit2 = [[NSDictionary alloc] initWithDictionary:dit0];
    NSLog(@"%@",dit2[@"1"]);
    NSDictionary *dit22 = [NSDictionary dictionaryWithDictionary:dit0];
    NSLog(@"%@",dit22[@"2"]);
4. 字典的遍历
    //一般for遍历
    NSDictionary *dit = @{@"1":@"A",@"2":@"B",@"4":@"D",@"3":@"C",@"4":@"D",@"5":@"E",@"6":@"F"};
    for (int i = 1; i < dit.count ; i++) {
      NSString *key = [NSString stringWithFormat:@"%d",i];
      NSLog(@"%@",dit[key]);
    }
    //for - in 的遍历
    for (NSString *str in dit) {
      NSLog(@"%@",dit[str]);
    }
    //枚举器遍历
    [dit enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
      NSLog(@"%@",dit[key]);
    }];
    [dit enumerateKeysAndObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(id key, id obj, BOOL *stop) {
      NSLog(@"%@",dit[key]);
    }];
5. 判断两个字典是否相等
    NSDictionary *dit = @{@"1":@"A",@"2":@"B",@"4":@"D",@"3":@"C",@"4":@"D",@"5":@"E",@"6":@"F"};

    if (![dit isEqualToDictionary:@{@"1":@"A",@"2":@"B"}]) {
      NSLog(@"不相等");
    }
6. 排序键值
    NSDictionary *dit = @{@"1":@"A",@"2":@"B",@"4":@"D",@"3":@"C",@"4":@"D",@"5":@"E",@"6":@"F"};
    NSArray *arr = [dit keysSortedByValueUsingSelector:@selector(compare:)];
    NSLog(@"%@",arr);
7. 文件的读写
    //从plist文件中读取字典
    NSString *path = @"/Users/MAC_SJM/Desktop/data.plist";
    NSDictionary *dit1 = [[NSDictionary alloc] initWithContentsOfFile:path];
    NSLog(@"%@",dit1);
    NSDictionary *dit2 = [NSDictionary dictionaryWithContentsOfFile:path];
    NSLog(@"%@",dit2);
    NSURL *url = [NSURL fileURLWithPath:@"/Users/MAC_SJM/Desktop/data.plist"];
    NSDictionary *dit3 = [[NSDictionary alloc] initWithContentsOfURL:url];
    NSLog(@"%@",dit3);
    NSDictionary *dit4 = [NSDictionary dictionaryWithContentsOfURL:url];
    NSLog(@"%@",dit4);

    //把字典写入plist文件
    NSDictionary *dit = @{@"1":@"A",@"2":@"B",@"4":@"D",@"3":@"C",@"4":@"D",@"5":@"E",@"6":@"F"};
    BOOL flag = [dit writeToFile:path atomically:YES];
    if (flag) {
      NSLog(@"写入成功");
    } else {
      NSLog(@"写入失败");
    }
    BOOL flag1 = [dit writeToURL:url atomically:YES];
    if (flag1) {
      NSLog(@"写入成功");
    } else {
      NSLog(@"写入失败");
    }

二. NSMutableDictionary(可变字典)

1. NSMutableDictionary是NSDictionary的子类,继承大部分的方法
2. 可变数组的基本操作
    //初始化一个空的可变字典
    //不能使用@{}来创建一个可变的字典
    NSMutableDictionary *dit = [NSMutableDictionary dictionary];

    //向字典添加元素
    [dit setValue:@"hello world" forKey:@"0"];
    NSLog(@"%@",dit);
    //把一个字典的值添加到另外的字典里
    NSDictionary *dit1 = @{@"1":@"A",@"2":@"B",@"4":@"D",@"3":@"C",@"4":@"D",@"5":@"E",@"6":@"F"};
    [dit setValuesForKeysWithDictionary:dit1];
    NSLog(@"%@",dit);

    //删除指定健和对象
    [dit removeObjectForKey:@"0"];
    NSLog(@"%@",dit);
    //删除多个健和对象
    [dit removeObjectsForKeys:@[@"1",@"2"]];
    NSLog(@"%@",dit);

    //修改元素
    //如果是不可变数组, 那么key不能相同,相同会覆盖前面的对象
    [dit setValue:@"A" forKey:@"3"];
    NSLog(@"%@",dit);
    dit[@"4"] = @"B";
    NSLog(@"%@",dit);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值