3

如果我有一个具有嵌套层次结构的不可变 NSDictionary,来自 JSON 字符串,那么更改深度嵌套在层次结构中的键的值的最简单方法是什么?

比如我有一个字典,“key1”的值是一个数组,在数组里面,每个元素都是一个字典,每个字典里面都有一个key“key2”的值,现在我想改变“key2”的值,因为整个数据结构是不可变的,这很困难,我是否应该用可变集合复制这个数据结构以便我可以更改该值,这似乎有很多开销,但这是唯一的我想到的方式。

4

2 回答 2

4

我不知道这是否是您可以接受的替代方案,但您可以使用选项从 JSON 字符串创建字典,该NSJSONReadingMutableContainers选项将所有数组和字典创建为可变对象。

于 2012-11-22T06:50:06.813 回答
0

我不完全确定,但我认为你必须将你的字典和数组中的每个人都传递给一个可变的。

这取决于您是否希望在更改之后仍然具有不可变结构,或者在更改之后它是否仍然可变并不重要。

如果您想在更改后保持不可变,那么您必须将 temp 变量用于可变 dict 和数组。

NSMutableDictionary *rootDict = [NSMutableDictionary dictionaryWithDictionary:rootImmutableDict];

NSMutableArray* mutableArray = [NSMutableArray arrayWithArray:[rootImmutableDict objectForKey:@"key1"]];

NSMutableDictionary* valueDict = [NSMutableDictionart dictionaryWithDictionary:[mutableArray objectAtIndex:idx]];

[valueDict setObject:newValueObject forKey:@"key2"];

[rootImmutableDict release];
rootImmutableDict = nil;
rootImmutableDict = [[NSDictionary alloc] initWithDictionary:rootDict];

如果它是否可变对您来说并不重要,那么您必须在使用临时不可变结构从 JSON 中检索它时使其可变,并使其永久可变。

我希望它对你有帮助。

于 2012-11-22T10:52:57.977 回答