2013-01-04 142 views
1

将对象从一个NSDictionary复制到另一个NSDictionary的最简洁方法是什么?我必须从字典中提取特定值并将它们存储在新字典中。目前我有一些简单的代码像这样...将对象从一个NSDictionary复制到另一个对象

NSString *value1 = [dictA objectForKey:@"1"]; 
[dictB setObject:value1 forKey:@"1"]; 

...但它感觉像它有比我想要的更常见的代码。我必须多次这样做,我想知道是否有更干净的方法来做到这一点。

在此先感谢您的智慧!

回答

6

在现代的Objective-C语法中,您实际上可以使用可变词典编写dictA[@"key1"] = dictB[@"key1"]

+0

是的,我认为这是要走的路,谢谢! – BeachRunnerFred

+0

很好的回答,我总是忘了使用快捷... + 1 –

1

为什么不在一条线上?

[dictB setObject:[dictA objectForKey:@"1"] forKey:@"1"]; 

在上面的代码中,如果需要,可以更改密钥。

+0

-1由于任何特定原因? –

+0

-1不是我的,我确实向你提供了帮助,但我不想使用一行代码,因为我的实际变量名称更加冗长,并且很难保持80字符的上限。另外,在我看来,它与我的原始方法具有相同数量的通用代码。 – BeachRunnerFred

+0

第二个呢? –

1

假设键是两个库之间的相同,那么也许你可以做一个辅助方法是这样的:

- (void)copyObjectFromDictA:(NSDictionary *)dictA toDictB:(NSDictionary *)dictB forKeys:(NSArray *)keys 
{ 
    for (NSString *key in keys) 
    { 
    [dictB setObject:[dictA objectForKey:key] forKey:key]]; 
    } 
} 
+0

使用的NSMutableDictionary和你有一个]得多: 正确的版本应该是: - (空)copyObjectFromDictA:(*的NSMutableDictionary)格言toDictB :(对于(NSString * key in keys) { [dictB setObject:[dictA objectForKey:key] forKey:key];(NSArray *)dictB forKeys:(NSArray *)keys { } } –

4

如果你想了很多按键的做到这一点,可以考虑使用+ (id)dictionaryWithSharedKeySet:(id)keyset。您必须先创建密钥集sharedKeySetForKeys: 这将导致只有两行代码...

+0

谢谢,SAE,这很有趣。我正在查看文档,但是我不清楚如何使用sharedKeySet来创建新的NSDictionary对象。如果你有机会,你介意发布一些示例代码吗? – BeachRunnerFred

+0

没关系,我发现它... dictionaryWithSharedKeySet – BeachRunnerFred

相关问题