2012-01-14 45 views
1

如果我有一个NSDictionary这样的:NSPredicates是否可以用数组中的值替换数组中的对象?

NSMutableDictionary *valuesDictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
[NSNumber numberWithDouble:-60.0],@”a”, 
[NSNumber numberWithDouble:0.0],@”b”, 
[NSNumber numberWithDouble:-12.0],@”c”, 
[NSNumber numberWithDouble:.3],@”x”, nil]; 

像这样的数组:

NSArray *program = [NSArray arrayWithObjects: @"a",@"12.6",@"100",@"+",@"x",nil]; 

将代码看起来象返回数组programWithVariableValues,例如,由@”是什么 - 60“,@” 12.6”,@” 100“,@ ”+“,@” 3”,零?

(替换用自己valueforkey的阵列中找到的任何变量)

那会是一个很好的地方,使用NSPredicate?或只是快速枚举?或者是其他东西?

回答

1

有可能是使用谓词和/或valueForKeyPath运营商一个聪明的一个班轮解决方案,但直到有人数字,一个出来,这应该做的伎俩:

NSMutableArray *programWithVariableValues = [NSMutableArray array]; 
for (NSString *key in program) 
{ 
    [programWithVariableValues addObject:[[valuesDictionary objectForKey:key] description] ?: key]; 
} 

的programWithVariableValues数组现在包含的值(作为字符串)。如果您希望将号码保留为NSNumbers,请取消“[...说明]”呼叫。

+0

谢谢。这很好。所以基本上,如果值字典中没有匹配,那么?:只是将密钥放在...优雅。 objc正在增长。 – 2012-01-14 03:44:22

+0

是的,“foo?:bar”基本上是写作“foo?foo:bar”,或“if(foo){return foo} else {return bar}”的简写方式。所以逻辑上说:“用钥匙抓住字典中的对象,如果返回零,只需使用钥匙,而不是” – 2012-01-14 09:39:47

+0

我必须习惯于大多数东西都可以成为这样的条件......我觉得很酷 – 2012-01-14 16:31:31