从数据库得到的方程式是Nsstring格式,例如:
if((height > 0),(weight+ 2 ),( weight-1 ) )
根据我们的理解,如果我解析了上面的字符串并且分开了> 0condition,它将是Nsstring格式.但是要评估它如何将字符串转换为条件语句?
一旦得到条件语句,可以通过将其转换为三元方程来解决方程如下:
Bool status;Nsstring *condition=@” height>0”;If(condition) //But condition is treated as a string and not as a conditional statement.{ status=True;}else{ status=False;}Return status ? weight+ 2 : weight-1;`
此外,方程式可以动态地改变,所以它们不能被硬编码.简而言之,我如何解决这个方程,我得到一个Nsstring.
感谢您的耐心等待!
解决方法 DDMathParser作者在这里…要扩展到Jonathan’s answer,您可以在DDMathParser中完全完成此 *** 作.但是,要按原样解析字符串,您需要做两件事情.
首先,您需要创建一个if函数:
DDMathEvaluator *evaluator = [DDMathEvaluator sharedMathEvaluator];[evaluator registerFunction:^DDExpression *(NSArray *args,NSDictionary *vars,DDMathEvaluator *eval,NSError *__autoreleasing *error) { if ([args count] == 3) { DDExpression *condition = [args objectAtIndex:0]; DDExpression *resultExpression = nil; NSNumber *conditionValue = [condition evaluateWithSubstitutions:vars evaluator:eval error:error]; if ([conditionValue boolValue] == YES) { resultExpression = [args objectAtIndex:1]; } else { resultExpression = [args objectAtIndex:2]; } NSNumber *result = [resultExpression evaluateWithSubstitutions:vars evaluator:eval error:error]; return [DDExpression numberExpressionWithNumber:result]; } return nil;} forname:@"if"];
这将创建if()函数,它需要三个参数.根据第一个参数的评估方式,它可以评估第二个或第三个参数的结果.
你需要做的另一件事就是告诉评估者什么高度和重量是什么意思.由于它们不以$字符开始,它们被解释为函数,而不是变量.如果他们以$开头,那么就像这样评估一样简单:
Nsstring *Expression = @"if(($height > 0),($weight+ 2 ),( $weight-1 ) )";NSDictionary *variables = @{@"height" : @42,@"weight" : @13};NSNumber *result = [Expression evaluateWithSubstitutions:variables evaluator:evaluator error:nil];
但是,由于它们不是以$开头,它们是函数,这意味着需要告诉评估者什么是评估函数.您可以通过创建高度和重量的功能来完成此 *** 作,就像您所做的那样:
[evaluator registerFunction:^DDExpression *(NSArray *args,NSError **error) { return [DDExpression numberExpressionWithNumber:@42];} forname:@"height"];
或者,您可以使其更具动态性,并使用DDMathEvaluator的functionResolver块,该块是返回块(woooooo)的块,如下所示:
NSDictionary *values = @{@"height": @42,@"weight": @13};[evaluator setFunctionResolver:^DDMathFunction(Nsstring *name) { DDMathFunction f = ^(NSArray *args,NSError **error) { NSNumber *n = [values objectForKey:name]; if (!n) { n = @0; } return [DDExpression numberExpressionWithNumber:n]; }; return f;}];
有了这两个部分(注册并提供高度和重量的值),你可以做:
Nsstring *Expression = @"if((height > 0),( weight-1 ) )";NSNumber *result = [Expression evaluateWithSubstitutions:nil evaluator:evaluator error:nil];
…并得到@ 15的正确结果.
(我有计划让DDMathParser允许未知功能回退到提供的变量值,但是我还没有完成)
总结以上是内存溢出为你收集整理的iphone – 如何在iOS中解决条件方程式全部内容,希望文章能够帮你解决iphone – 如何在iOS中解决条件方程式所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)