iphone – 如何在iOS中解决条件方程式

iphone – 如何在iOS中解决条件方程式,第1张

概述我想在iOS中解决条件方程: 从数据库得到的方程式是NSString格式,例如: if((height > 0), (weight+ 2 ), ( weight-1 ) ) 根据我们的理解,如果我解析了上面的字符串并且分开了> 0condition,它将是NSString格式.但是要评估它如何将字符串转换为条件语句? 一旦得到条件语句,可以通过将其转换为三元方程来解决方程如下: Bool stat 我想在iOS中解决条件方程:

从数据库得到的方程式是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中解决条件方程式所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1057683.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存