Всем привет! Хочу поделиться небольшим кусочком кода для быстрого вычисления математических выражений из строк, который изначально был написан для моей инди игры - 4X стратегии MyCivGame. Проект я решил назвать Context EXpressions ?.
Строки анализируются один раз, затем могут быстро вычисляться с разным контекстом. В контекст помещаются начальные значения переменных, результат вычисления также будет помещен в контекст.
Пример:
var context = new Dictionary<string, double>();
context.Add("a", 2);
context.Add("b", 5);
var expression = new ComplexExpression(@"
c = 9;
result1 = a + b + c;
result2 = (a + b) * c;
result3 = (a + b - 5) ^ (3 * a);
result4 = result2 / 1000;
x = result1 - result2 / 15.6 * (-result3) - result4;
");
expression.Call(context);
Содержание словаря после вычисления:
a = 2
b = 5
c = 9
result1 = 16
result2 = 63
result3 = 64
result4 = 0,063
x = 274,39853846153846
На данный момент поддерживаются конструкции: +, -, *, /, ^, ( ), строки разделяются с помощью ";" или ",". Для моей игры этого достаточно, но если кто-то хочет продолжить развивать эту библиотеку, добро пожаловать в мой Telegram-канал, где можно пообщаться со мной, и где я рассказывают про разработку моей игры, а также на GitHub этого проекта!
barkalov
Для моей игры этого достаточно, но если кто-то хочет продолжить развивать эту библиотеку, добро пожаловать в мой Telegram-канал, где можно пообщаться со мной
Вы совсем охренели уже... Во что вы превратили Хабр.
kirichenec
В пикабу) Там такое уже давно)
Для Хабра допустим только гитхаб в данном случае, имхо