2012-10-22 149 views
1

如何使用NSExpression来计算公式(a + b)^2, sum((a + b)/2)?我是初学者到NSExpressionNSExpression的用途是什么?

(a + b)^ 2如何在目标c中使用整个正方形2。

+3

的主要目的是'NSExpression'是除去全部大写。 – 2012-10-22 07:47:44

回答

2

NSExpression不是通用数学表达式求值器。它旨在与NSPredicate一起用于描述核心数据查询中的选择标准。

0

NSExpression用于表示NSPredicate中的表达式。它不适用于像你这样的任务。

其实,你can使用NSExpression计算公式值,但这种用法是相当有限的。为了评估任何数学表达式,您需要使用某种算法(如Shunting-yard)来创建字符串解析器,或者仅重新使用像this one这样的库。

8

NSExpression对于评估目标c中的数学表达式很有用

让我们看看如何使用NSExpression

NSArray *arrNumbers = @[@3, @6, @3, @8, @4, @12, @9, @11]; 

NSExpression *expression = [NSExpression expressionForFunction:@"stddev:" arguments:@[[NSExpression expressionForConstantValue:arrNumbers]]]; 

id value = [expression expressionValueWithObject:nil context:nil]; 

就这么简单,找数的标准偏差。

以下是按类别分组的功能列表。

1)的统计方法列表

average: 
sum: 
count: 
min: 
max: 
median: 
mode: 
stddev: 

2)算术函数

add:to: 
from:subtract: 
multiply:by: 
divide:by: 
modulus:by: 
abs: 
sqrt: 
log: 
ln: 
raise:toPower: 
exp: 

3)边界功能

ceiling: 
trunc: 

4)随机函数

random 
random: 

5)二进制算术函数

bitwiseAnd:with: 
bitwiseOr:with: 
bitwiseXor:with: 
leftshift:by: 
rightshift:by: 
onesComplement: 

6)日期函数

now 

7)字符串函数

lowercase: 
uppercase: 

8)无操作

noindex: 
+0

是否在任何地方记录了完整的语法? NSExpression的Apple文档并没有真正说出你可以传递给'expressionWithFormat:'的运算符(或函数):' – peterflynn

+0

我也无法在其他地方找到太多的东西。如果你遇到了我知道的东西 –

5

NSExpression是伟大的评估数学表达式。它不仅限于核心数据查询,而且您不需要额外的第三方库或编写自己的解析器来将表达式评估为字符串。

要实际回答(A + B)^ 2的问题;)

NSNumber *a = @4; 
NSNumber *b = @4; 
NSExpression *expression = [NSExpression expressionWithFormat:@"(%@ + %@)**2", a, b]; 
NSNumber *result = [expression expressionValueWithObject:nil context:nil]; 
NSLog(@"%@",result);