можно использовать NSPredicates для замены объектов в массиве значениями из словаря? - PullRequest
1 голос
/ 14 января 2012

Если бы у меня был NSDictionary вроде этого:

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 ″, nil?

(замена любых переменных, найденных в массиве, их значениями для ключа)

Это было бы хорошим местом для использования NSPredicate?или просто быстрое перечисление?или что-то еще?

1 Ответ

1 голос
/ 14 января 2012

Может быть умное однострочное решение, использующее предикаты и / или операторы valueForKeyPath, но пока кто-нибудь не выяснит это, это должно сработать:

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

Массив programWithVariableValues ​​теперь содержит ваши значения (в виде строк). Если вы предпочитаете, чтобы номера были номерами NSNumbers, уберите вызов "[... description]".

...