ios – 如何遍历NSDictionaries和NSArrays的嵌套层次结构并将所有转换为可变副本?

ios – 如何遍历NSDictionaries和NSArrays的嵌套层次结构并将所有转换为可变副本?,第1张

概述我有一个NSDictionary,包含许多不同类型对象的实例(NS Arrays,NSDictionaries,NSStrings,NSNumbers等…).许多NSDictionaries和NSStrings都有自己的嵌套NSDictionaries和NSArrays. 如何从上到下遍历整个层次结构,并将NSDictionaries和NSArrays的所有实例分别转换为NSMutableDict 我有一个NSDictionary,包含许多不同类型对象的实例(NS Arrays,NSDictionarIEs,Nsstrings,NSNumbers等…).许多NSDictionarIEs和Nsstrings都有自己的嵌套NSDictionarIEs和NSArrays.

如何从上到下遍历整个层次结构,并将NSDictionarIEs和NSArrays的所有实例分别转换为NSMutableDictionarIEs和NSMutableArrays?

是否有任何简单的“递归制作可变副本”功能我不知道?如果没有,我只需要反复循环和打字检查吗?我可以随时更换,还是重建整个层次结构?

解决方法 以下方法创建嵌套数组,字典和集的嵌套(深层)可变副本.它还可用于在层次结构内创建非集合对象的可变副本,例如字符串.
@interface NSObject (MyDeepcopy)-(ID)deepMutablecopy;@end@implementation  NSObject (MyDeepcopy)-(ID)deepMutablecopy{    if ([self isKindOfClass:[NSArray class]]) {        NSArray *oldArray = (NSArray *)self;        NSMutableArray *newArray = [NSMutableArray array];        for (ID obj in oldArray) {            [newArray addobject:[obj deepMutablecopy]];        }        return newArray;    } else if ([self isKindOfClass:[NSDictionary class]]) {        NSDictionary *oldDict = (NSDictionary *)self;        NSMutableDictionary *newDict = [NSMutableDictionary dictionary];        for (ID obj in oldDict) {            [newDict setobject:[oldDict[obj] deepMutablecopy] forKey:obj];        }        return newDict;    } else if ([self isKindOfClass:[NSSet class]]) {        NSSet *oldSet = (NSSet *)self;        NSMutableSet *newSet = [NSMutableSet set];        for (ID obj in oldSet) {            [newSet addobject:[obj deepMutablecopy]];        }        return newSet;#if MAKE_MUtable_copIES_OF_NONColLECTION_OBJECTS    } else if ([self conformstoprotocol:@protocol(NSMutablecopying)]) {            // e.g. Nsstring        return [self mutablecopy];    } else if ([self conformstoprotocol:@protocol(NScopying)]) {            // e.g. NSNumber        return [self copy];#endif    } else {        return self;    }}@end

用它就好

NSDictionary *dict = ...;NSMutableDictionary *mdict = [dict deepMutablecopy];

(不复制字典键,只复制值).

我很确定我在SO上看过这样的东西,但现在找不到它.

总结

以上是内存溢出为你收集整理的ios – 如何遍历NSDictionaries和NSArrays的嵌套层次结构并将所有转换为可变副本?全部内容,希望文章能够帮你解决ios – 如何遍历NSDictionaries和NSArrays的嵌套层次结构并将所有转换为可变副本?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1109374.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存