我有三个例子,我必须评估表达式,例如,
(x + y +30)
((p == "Good") && (q == "Morning")) || (r == "10:00")
((w == "Night") && ( (a + b +30) >100 ) )
此处x
,y
,a
和b
是整数,p
,q
,r
和w
是字符串。
对于#1,我使用了DDMathParser库但是对于#2和3我们不能,因为DDMathParser不允许进行字符串评估。
要求是评估上述表达式的任何库或示例源代码,包含字符串和值。
请帮我评估一下。
任何帮助表示感谢。
答案 0 :(得分:2)
所有这些都可以使用NSPredicate
或NSExpression
进行解析。您可以使用@try...@catch
语句尝试通过+[NSPredicate predicateWithFormat:]
或+[NSExpression expressionWithFormat:]
运行它们,看看哪个有效。
完成后,您可以针对NSDictionary
对其进行评估,看看会发生什么。例如:
NSString *formula = @"((w == \"Night\") && ( (a + b +30) >100 ) )";
NSPredicate *p = [NSPredicate predicateWithFormat:formula];
NSDictionary *object = @{
@"w": @"Night",
@"a": @42,
@"b": @33
};
BOOL passes = [p evaluateWithObject:object];
NSLog(@"passes: %@", passes ? @"yes" : @"no"); // logs "yes"