2012-10-22 181 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);