2012-01-14 74 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