NSPredicates 可以用来用字典中的值替换数组中的对象吗?

Posted

技术标签:

【中文标题】NSPredicates 可以用来用字典中的值替换数组中的对象吗?【英文标题】:can NSPredicates be used to replace objects in an array with values from a dictionary? 【发布时间】:2012-01-14 00:09:06 【问题描述】:

如果我有这样的 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 组成?

(将在数组中找到的任何变量替换为它们的 valueforkey)

那是使用 NSPredicate 的好地方吗?还是只是快速枚举?还是别的什么?

【问题讨论】:

【参考方案1】:

可能有一个使用谓词和/或 valueForKeyPath 运算符的巧妙的单线解决方案,但在有人想出来之前,这应该可以解决问题:

NSMutableArray *programWithVariableValues = [NSMutableArray array];
for (NSString *key in program)

    [programWithVariableValues addObject:[[valuesDictionary objectForKey:key] description] ?: key];

programWithVariableValues 数组现在包含您的值(作为字符串)。如果您希望将数字保留为 NSNumbers,请取出“[...描述]”调用。

【讨论】:

谢谢。效果很好。所以基本上,如果值字典中没有匹配项, ?: 只需将键放入......优雅。 objc 在我身上成长。 是的,“foo ?: bar”基本上是“foo ? foo: bar”或“if (foo) return foo else return bar”的简写方式。所以逻辑说“用 key 抓取字典中的对象,如果返回 nil,就用 key 代替” 我必须习惯大多数事情都可以变成这样的条件......我觉得这很酷

以上是关于NSPredicates 可以用来用字典中的值替换数组中的对象吗?的主要内容,如果未能解决你的问题,请参考以下文章

用字典替换熊猫系列中的值

Pyspark:用字典中的值替换列的值

用字典值替换字符串中的字典键

用字典的值替换字符串

根据字典替换数据框列中的值不起作用[重复]

用字典键值(pyspark)替换火花df中一列的值