Iphone 如何复制单个嵌套的NSDictionary';从NSDictionary转换为临时NSMutableDictionary
好的,我想从嵌套字典的NSDictionary创建一个临时NSDictionary,但我想从顶级字典深度复制单个项(字典) 最终的结果是有一个经过过滤的字典,我可以在不影响主字典的情况下处理和丢弃它 这听起来真的很混乱,那么让我们看一段代码来说明我的意思,这是我正在处理的函数,这是一个粗略的编码布局,但基本上是完整的过程 我在网上看了参考书和各种样品,一点也不高兴 干杯, 达伦Iphone 如何复制单个嵌套的NSDictionary';从NSDictionary转换为临时NSMutableDictionary,iphone,Iphone,好的,我想从嵌套字典的NSDictionary创建一个临时NSDictionary,但我想从顶级字典深度复制单个项(字典) 最终的结果是有一个经过过滤的字典,我可以在不影响主字典的情况下处理和丢弃它 这听起来真的很混乱,那么让我们看一段代码来说明我的意思,这是我正在处理的函数,这是一个粗略的编码布局,但基本上是完整的过程 我在网上看了参考书和各种样品,一点也不高兴 干杯, 达伦 看起来你把字典和数组搞混了 数组响应objectAtIndex,而字典响应objectForKeys。请记住,数组是一
看起来你把字典和数组搞混了 数组响应
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。太好了,为什么他们不能在书中这样解释呢,哈哈。写了这篇文章后,我意识到我是在字典中使用数组,而不是在字典中使用字典,但是你帮我澄清了一些误解,谢谢你。