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 可以用来用字典中的值替换数组中的对象吗?的主要内容,如果未能解决你的问题,请参考以下文章