2012-01-14 2 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 растет на меня. –

+0

Да, «foo?: Bar» - это в основном сокращенный способ написания «foo? Foo: bar» или «if (foo) {return foo} else {return bar}». Итак, логика говорит: «Захватите объект в словаре с помощью ключа, и если он вернет нуль, просто используйте вместо него ключ» –

+0

Мне нужно привыкнуть, как большинство из них может стать условным ... это довольно круто, я думаю –