其他用法

  • addEntriesFromDictionary用法

前言

  • 字典只能存储 OC 对象,不能存储 C 语言中的基本数据类型,也不能存储 nil 。字典中的键必须是单值的,通常它们是字符串。
  • 字典对象是无序的,第一个放到词典中的键-对象对并不一定是第一个取出。
  • Xcode 7 对系统中常用的一系列容器类型都增加了泛型支持(),有了泛型后就可以指定容器类中对象的类型了。
  • 假如向泛型容器中加入错误的对象,编译器会报警告。
    • __covariant:协变性,子类型可以强转到父类型(里氏替换原则)。
    • __contravariant:逆变性,父类型可以强转到子类型。
  • 不指定泛型类型的对象可以和任意泛型类型转化,但指定了泛型类型后,
  • 两个不同类型间是不可以强转的,假如你希望主动控制转化关系,就需要使用泛型的协变性和逆变性修饰符。

1、不可变字典的创建

// 直接创建不可变字典// 字典中的 key 和 value 成对出现
NSDictionary *dic1 = @{@"key1":@"value1", @"key2":@"value2"};// 对象方法创建NSDictionary *dic2 = [[NSDictionary alloc] init];// 和 dic1 的地址不相同
NSDictionary *dic3 = [[NSDictionary alloc] initWithDictionary:dic1];NSDictionary *dic4 = [[NSDictionary alloc] initWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil];
NSDictionary *dic5 = [[NSDictionary alloc] initWithObjects:@[@"value1", @"value2", @"value3",] forKeys:@[@"key1", @"key2", @"key3"]];// 类方法创建
NSDictionary *dic6 = [NSDictionary dictionary];// 和 dic1 的地址不相同
NSDictionary *dic7 = [NSDictionary dictionaryWithDictionary:dic1];NSDictionary *dic8 = [NSDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil];
NSDictionary *dic9 = [NSDictionary dictionaryWithObject:@"value1" forKey:@"key1"];
NSDictionary *dic10 = [NSDictionary dictionaryWithObjects:@[@"value1", @"value2", @"value3",] forKeys:@[@"key1", @"key2", @"key3"]];// 从 文件 创建字符串NSString *path = [NSHomeDirectory() stringByAppendingString:@"/Desktop/test.txt"];NSDictionary *dic11 = [[NSDictionary alloc] initWithContentsOfFile:path];
NSDictionary *dic12 = [NSDictionary dictionaryWithContentsOfFile:path];// 从 Url 创建字符串/*
file:// 文件前缀
*/NSURL *url = [NSURL URLWithString:[@"file://" stringByAppendingString:[NSHomeDirectory() stringByAppendingString:@"/Desktop/test.txt"]]];NSDictionary *dic13 = [[NSDictionary alloc] initWithContentsOfURL:url];
NSDictionary *dic14 = [NSDictionary dictionaryWithContentsOfURL:url];// 泛型创建NSDictionary<NSString *, NSNumber *> *dic15 = @{@"key1":@3, @"key2":@5};

2、字典中元素个数的计算

NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil];NSUInteger length = [dic count];

3、通过 key 找对应的 value

NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil];// 通过 key 找对应的 value
NSLog(@"%@", [dic objectForKey:@"key1"]);// 以下标的方式找 key 找对应的 value
NSLog(@"%@", dic[@"key2"]);// key 没有对应的 value 时用 notFoundMarker 参数代替
NSArray *arr = [dic objectsForKeys:@[@"key1", @"key1", @"key3"] notFoundMarker:@"not-Found"];

4、通过 value 找对应的 key

NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", @"value2", @"key3", nil];NSLog(@"%@", [dic allKeysForObject:@"value2"]);

5、字典中所有 key 的获取

NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil];NSLog(@"%@", [dic allKeys]);

6、字典中所有 value 的获取

NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil];NSLog(@"%@", [dic allValues]);

7、可变字典 NSMutableDictionary 的创建

// 对象方法创建// 创建指定长度的字典,预先分配空间,提高效率,实际长度可大于指定长度
NSMutableDictionary *dic1 = [[NSMutableDictionary alloc] initWithCapacity:0];// 类方法创建// 创建指定长度的字典,预先分配空间,提高效率,实际长度可大于指定长度
NSMutableDictionary *dic2 = [NSMutableDictionary dictionaryWithCapacity:0];

8、字典中键值对的追加

NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", nil];// 向字典末尾追加一个元素(key 值为新增的,若 key 值已存在则为修改对应的 value 值)
[dic setObject:@"value2" forKey:@"key2"];// 向字典末尾追加一个字典
NSDictionary *dicAdd = @{@"key3": @"value3"};
[dic addEntriesFromDictionary:dicAdd];

9、字典中元素的删除

NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", @"value3", @"key3", @"value4", @"key4", nil];// 删除指定的 key 对应的 value 和 key 值
[dic removeObjectForKey:@"key3"];// 删除所有的 value 和 key 值
[dic removeAllObjects];

10、字典中元素的修改

NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", @"value3", @"key3", @"value4", @"key4", nil];// 修改已存在的键值(key 值为已经存在的,若 key 值为新增的则为追加对应的 value 值)
[dic setObject:@"value5" forKey:@"key1"];// 修改整个字典(覆盖重写)
NSDictionary *dic1 = @{@"key10":@"value10"};
[dic setDictionary:dic1];

11、字典遍历

  • 11.1 for 循环

NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil];for (int i = 0; i < [dic count]; i++) {NSLog(@"%@ = %@", [[dic allKeys] objectAtIndex:i], [dic objectForKey:[[dic allKeys] objectAtIndex:i]]);
}
  • 11.2 for...in 循环

NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil];// 遍历所取出的为 key
for(id key in dic){NSLog(@"%@ = %@", key, [dic objectForKey:key]);
}
  • 11.3 Block 遍历

NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil];[dic enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {NSLog(@"%@ = %@", key, obj);
}];
  • 11.4 迭代器遍历

NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil];// key 迭代器
NSEnumerator *keyEnumer = [dic keyEnumerator];id key = nil;
while (key = [keyEnumer nextObject]) {NSLog(@"%@ = %@", key, [dic objectForKey:key]);
}// 对象迭代器
NSEnumerator *objEnumer = [dic objectEnumerator];id obj = nil;
while (obj = [objEnumer nextObject]) {NSLog(@"%@", obj);
}

12、字典排序

  • 12.1 用指定的方法排序

NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", @"value3", @"key3", @"value4", @"key4", nil];// 先对 key 进行排序,再遍历数组
id keys1 = [dic keysSortedByValueUsingSelector:@selector(compare:)];for (id key in keys1) {NSLog(@"%@ = %@", key, dic[key]);
}
  • 12.2 用 Block 排序

NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", @"value3", @"key3", @"value4", @"key4", nil];id keys2 = [dic keysSortedByValueUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {return [obj1 compare:obj2];
}];for (id key in keys2) {NSLog(@"%@ = %@", key, dic[key]);
}

转载于:https://www.cnblogs.com/CH520/p/9410430.html

NSDictionary相关推荐

  1. OC中的NSArray和NSMutableArray、NSDictionary和NSMutableDictionary用法

    一:NSArray 和NSMutableArray 1: NSArray:不可变数组 NSArray是OC中使用的数组,只能用来存放OC对象,不能存放非OC对象如基本数据类型 它使不可变的,一旦初始化 ...

  2. [ObjectiveC]NSDATA, NSDICTIONARY, NSSTRING互转

    2019独角兽企业重金招聘Python工程师标准>>> NSDATA-->NSDICTIONARY NSDictionary *dict = [NSJSONSerializat ...

  3. oc75--不可变字典NSDictionary

    // // main.m // NSDictionary // // #import <Foundation/Foundation.h>int main(int argc, const c ...

  4. NSDictionary、NSMutableDictionary基本使用

    郝萌主倾心贡献,尊重作者的劳动成果.请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下 ...

  5. 使用定制的NSDictionary的方法,对NSArray进行排序(附:数组排序两种常见方法)

    NSArray中存放的是NSDictionary,可以使用策略的方法对NSDictionary进行定制,增加比较的方法.然后调用NSArray的sortUsingSelector方法对数组进行排序,这 ...

  6. NSArray,NSSet,NSDictionary总结 (转)

    NSArray,NSSet,NSDictionary总结 博客分类: iphone 三种集合类来收集cocoa对象(NSObject对象): NSArray 用于对象有序集合(相当于是数组) NSSe ...

  7. NSArray与NSString、NSData,NSDictionary与NSString、NSData 相互转化

    NSArray *array = @[ @1, @2, @3, @4, @5, @3 ];// 1. NSArray与NSData相互转化// NSArray to NSDataNSError *er ...

  8. 【Foundation Frame】NSDictionary/NSMutableDictionary

    NSDictionary 用于保存具有映射关系的数据,NSDictionary 包含两组数据,一组用来保存key值,一组用来保存valure值. 一个Key可以对应多个value,反过来则不可以. / ...

  9. 【转】NSDictionary以及NSMutableDictionary的用法

    原文网址:http://my.oschina.net/u/1245365/blog/177736 摘要 Foundation中的字典是由 键-值 对组成的数据集合.通过key(键),查找对应的valu ...

最新文章

  1. ReferenceQueue的使用
  2. Nacos配置中心原理
  3. NOIP 2017 提高组 K: 奶酪 (SPFA || 并查集)
  4. 事务的隔离级别演示-避免脏读,演示不可重复读发生
  5. python语句join_Python中的join()函数的用法
  6. React开发(247):react项目理解 学会debugger
  7. java炫舞_Java 炫舞按键功能 DancingPlay (整理)
  8. java observer模式_Java观察者模式(Observer)详解及应用
  9. 在LaTeX中,如何在目录和章节(Chapter)等部分的shouye上显示页眉(解决没有页眉的问题)
  10. linux UVC and hardware viewer
  11. GoLang语言:邮件群发器
  12. 面向对象,数据库交互的Spring-boot(新手)
  13. JAVA 垃圾回收
  14. tensorflow 学习率的下降策略
  15. 使用Python调用Nessus 接口实现自动化扫描
  16. uni-app web-view调用谷歌地图
  17. 使用Java Swing实现7个经典应用诠释算法精髓
  18. 哈勃发现史上最遥远单颗恒星 距离地球129亿光年
  19. UE4 粒子特效基础学习 (04-光圈效果制作)
  20. 台式APE播放机 硬盘APE播放器 APE Player Ver0.1完成

热门文章

  1. C++ 编译器多态与运行时多态
  2. DPDK vhost库(十一)
  3. linux 内核网络协议栈--数据从接收到IP层(二)
  4. leetcode算法题--推多米诺
  5. leetcode算法题--最长公共子数组
  6. 使用正则替换文件头注释
  7. 【规范】前端编码规范——jquery 规范
  8. Nginx Location配置总结
  9. Apache服务器错误问题Internal Server Error
  10. DatagridView内容自动换行和换行符换行