Какая польза от NSExpression?

Как рассчитать формулы как (a + b) ^ 2, sum((a + b) / 2) с помощью NSExpression? Я новичок в NSExpression,

(a + b) ^ 2, как использовать весь квадрат 2 в цели c.

4 ответа

Решение

NSExpression не является оценщиком математических выражений общего назначения. Он предназначен для использования с NSPredicate описать критерии выбора в запросах Core Data.

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)No-Op

noindex:

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

NSExpression используется для представления выражений в NSPredicate. Он не предназначен для таких задач, как ваша.

На самом деле, вы можете использовать NSExpression вычислить значение формулы, но это использование довольно ограничено. Чтобы оценить любое математическое выражение, вам нужно создать синтаксический анализатор строк, используя некоторый алгоритм, например, Shunting-yard, или просто повторно использовать библиотеку, подобную этой.

Другие вопросы по тегам