Iphone 如何复制单个嵌套的NSDictionary';从NSDictionary转换为临时NSMutableDictionary

Iphone 如何复制单个嵌套的NSDictionary';从NSDictionary转换为临时NSMutableDictionary,iphone,Iphone,好的,我想从嵌套字典的NSDictionary创建一个临时NSDictionary,但我想从顶级字典深度复制单个项(字典) 最终的结果是有一个经过过滤的字典,我可以在不影响主字典的情况下处理和丢弃它 这听起来真的很混乱,那么让我们看一段代码来说明我的意思,这是我正在处理的函数,这是一个粗略的编码布局,但基本上是完整的过程 我在网上看了参考书和各种样品,一点也不高兴 干杯, 达伦 看起来你把字典和数组搞混了 数组响应objectAtIndex,而字典响应objectForKeys。请记住,数组是一

好的,我想从嵌套字典的NSDictionary创建一个临时NSDictionary,但我想从顶级字典深度复制单个项(字典)

最终的结果是有一个经过过滤的字典,我可以在不影响主字典的情况下处理和丢弃它

这听起来真的很混乱,那么让我们看一段代码来说明我的意思,这是我正在处理的函数,这是一个粗略的编码布局,但基本上是完整的过程

我在网上看了参考书和各种样品,一点也不高兴

干杯, 达伦


看起来你把字典和数组搞混了

数组响应
objectAtIndex
,而字典响应
objectForKeys
。请记住,数组是一组可以索引到的单元格,从0一直到
[array count]-1

字典类似于数组,不同的是使用哈希函数作为索引方法。这意味着您需要一个键来获取或设置对象

NSMutableDictionary

NSMutableDictionary *myDictionary = [[NSMutableDictionary alloc] init];
[myDictionary setObject:anObject forKey:aKey];
或者,您可以拥有一个键数组和相应的对象数组,并执行以下操作:

NSDictionary *completeDictionary;
completeDictionary = [NSDictionary  dictionaryWithObjects:objectArray 
                      forkeys:keyArray count:[keyArray count]];
无论哪种情况,都必须具有对象的关键点。这与常规数组不同,在常规数组中,您可以简单地执行以下操作

[myArray addObject:myObject];
要从字典中获取对象,请执行以下操作

myObject = [myDictionary objectForKey:key];
要从数组中获取对象,请执行以下操作

myObject = [myArray objectAtIndex:anIntegerIndex];
最后,你最初的问题与深度复制有关。要让词典保留一个不会更改的对象(即深度副本),可以执行以下操作:

假设我想在字典中存储字典,并且我有顶级字典的关联键,我可以执行以下操作:

我有一个
NSMutableDictionary
,名为
topLevelDictionary
我有一本
NSDictionary
,名为
dictionaryTwo
我有一个
NSString
,它是我的密钥,名为
myKey

要深度复制字典2,我可以

// assuming topLevelDictionary is previously defined
[topLevelDictionary setObject:[[dictionaryTwo copy] autorelease] forKey:myKey];

以这种方式,
topLevelDictionary
将包含一个
dictionaryTwo
的副本,如果
dictionaryTwo
发生更改,
topLevelDictionary
中的对象将不会更改。

看起来您将字典与数组混为一谈

数组响应
objectAtIndex
,而字典响应
objectForKeys
。请记住,数组是一组可以索引到的单元格,从0一直到
[array count]-1

字典类似于数组,不同的是使用哈希函数作为索引方法。这意味着您需要一个键来获取或设置对象

NSMutableDictionary

NSMutableDictionary *myDictionary = [[NSMutableDictionary alloc] init];
[myDictionary setObject:anObject forKey:aKey];
或者,您可以拥有一个键数组和相应的对象数组,并执行以下操作:

NSDictionary *completeDictionary;
completeDictionary = [NSDictionary  dictionaryWithObjects:objectArray 
                      forkeys:keyArray count:[keyArray count]];
无论哪种情况,都必须具有对象的关键点。这与常规数组不同,在常规数组中,您可以简单地执行以下操作

[myArray addObject:myObject];
要从字典中获取对象,请执行以下操作

myObject = [myDictionary objectForKey:key];
要从数组中获取对象,请执行以下操作

myObject = [myArray objectAtIndex:anIntegerIndex];
最后,你最初的问题与深度复制有关。要让词典保留一个不会更改的对象(即深度副本),可以执行以下操作:

假设我想在字典中存储字典,并且我有顶级字典的关联键,我可以执行以下操作:

我有一个
NSMutableDictionary
,名为
topLevelDictionary
我有一本
NSDictionary
,名为
dictionaryTwo
我有一个
NSString
,它是我的密钥,名为
myKey

要深度复制字典2,我可以

// assuming topLevelDictionary is previously defined
[topLevelDictionary setObject:[[dictionaryTwo copy] autorelease] forKey:myKey];

以这种方式,
topLevelDictionary
将包含一份
dictionaryTwo
的副本,如果
dictionaryTwo
发生变化,
topLevelDictionary
中的对象将不会发生变化。

完美,他们为什么不能像书中那样解释它呢,哈哈。写完这篇文章后,我确实意识到我是在字典中使用数组,而不是在字典中使用字典,但你帮我澄清了一些误解,谢谢aqua。太好了,为什么他们不能在书中这样解释呢,哈哈。写了这篇文章后,我意识到我是在字典中使用数组,而不是在字典中使用字典,但是你帮我澄清了一些误解,谢谢你。