objective-c - 深度结合 NSDictionaries

标签 objective-c merge nsdictionary

我需要将两个 NSDictionary 合并为一个,前提是如果字典中有字典,它们也会被合并。

或多或少像 jQuery 的 extend功能。

最佳答案

NSDictionary+Merge.h

#import <Foundation/Foundation.h>

@interface NSDictionary (Merge)

+ (NSDictionary *) dictionaryByMerging: (NSDictionary *) dict1 with: (NSDictionary *) dict2;
- (NSDictionary *) dictionaryByMergingWith: (NSDictionary *) dict;

@end

NSDictionary+Merge.m

#import "NSDictionary+Merge.h"

@implementation NSDictionary (Merge)

+ (NSDictionary *) dictionaryByMerging: (NSDictionary *) dict1 with: (NSDictionary *) dict2 {
    NSMutableDictionary * result = [NSMutableDictionary dictionaryWithDictionary:dict1];

[dict2 enumerateKeysAndObjectsUsingBlock: ^(id key, id obj, BOOL *stop) {
    if (![dict1 objectForKey:key]) {
        if ([obj isKindOfClass:[NSDictionary class]]) {
            NSDictionary * newVal = [[dict1 objectForKey: key] dictionaryByMergingWith: (NSDictionary *) obj];
            [result setObject: newVal forKey: key];
        } else {
            [result setObject: obj forKey: key];
        }
    }
}];

    return (NSDictionary *) [[result mutableCopy] autorelease];
}
- (NSDictionary *) dictionaryByMergingWith: (NSDictionary *) dict {
    return [[self class] dictionaryByMerging: self with: dict];
}

@end

关于objective-c - 深度结合 NSDictionaries,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4011781/

相关文章:

ios - 带有自定义 UITableViewCells 的表单

ios - WatchConnectivity 试图将数据发送到 Watch 应用程序

mercurial - merge "creates new remote heads"后推送到远程存储库 - 是不是很糟糕?

python - 使用 pandas.join 加入 datetime64[ns, UTC] 失败

java - 合并不等长的排序数组

ios - 如何将下面这样的json字符串转换为字典?

ios - 如何将 NSDictionary 转换为自定义对象

ios - Little-Endian 字节顺序(iOS,BLE 扫描响应)

objective-c - `-fembed-bitcode` 和 BITCODE_GENERATION_MODE 有什么区别?

objective-c - 如何在不收到警告的情况下比较 2 个整数?