NSExpression有什么用?

时间:2012-10-22 07:45:41

标签: objective-c ios expression

如何使用(a + b) ^ 2, sum((a + b) / 2)计算NSExpression之类的公式?我是NSExpression的初学者。

(a + b)^ 2如何在目标c中使用整数2。

4 个答案:

答案 0 :(得分:11)

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:

答案 1 :(得分:8)

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);

答案 2 :(得分:1)

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

答案 3 :(得分:-1)

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

实际上,您can使用NSExpression来计算公式值,但这种用法非常有限。要评估任何数学表达式,您需要使用某种算法(即Shunting-yard)创建字符串解析器,或者仅重用this one之类的库。