objective-c - 如何在 NSDictionary 中交换键和值?

标签 objective-c nsdictionary foundation

我想知道如何反转 NSDictionary。

我见过一些疯狂的代码,比如

NSDictionary *dict = ...;
NSDictionary *swapped  = [NSDictionary dictionaryWithObjects:dict.allKeys forKeys:dict.allValues];

根据文档,这是不安全的,因为不能保证 allValuesallKeys 的顺序。

最佳答案

NSDictionary *dict = ...;    
NSMutableDictionary *swapped = [NSMutableDictionary new];
[dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop) {
    swapped[value] = key;
}];

请注意,这些值还应符合 NSCopying 协议(protocol)。

关于objective-c - 如何在 NSDictionary 中交换键和值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32243455/

相关文章:

objective-c - NSArray 或 NSDictionary 用于存储在 UserDefaults 中?

iPhone - NSDictionary 到 NSArray 并保留顺序

swift - FileManager 抛出什么错误?

swift - Extra\N{...} 使用 kCFStringTransformToUnicodeName 或 NSStringTransformToUnicodeName 时

ios - 核心数据异常 "Couldn' t 应用表达式副作用 : Couldn't dematerialize a result variable: couldn't read its memory"

objective-c - Xcode - 何时使用 UIView 或 UITableView?

objective-c - 如何获取字符串并从中删除部分以转换为 double

objective-c - 使用异步显示工具包缩放文本 ASTextNode

ios - 将 NSString 转换为 NSDictionary 并将 NSDictionary 转换为 NSString

swift - Swift 中的关键字协议(protocol)(大写 P)是什么