Exemple #1
0
        static void Main(string[] args)
        {
            PrmsFunc <int, int> F      = Memoize <int, int>(SomeExpensiveOperation);
            PrmsFunc <int, int> Lambda = prms => F(prms[0]) > F(prms[1]) ? F(prms[0]) : (F(prms[0]) < F(2 * prms[1]) ? F(2 * prms[1]) : F(prms[1]));

            int[] lambdaParams = { 1, 5 };

            double i = OptimizedCalculation(Lambda, lambdaParams);

            Console.WriteLine($"Результат: {i}");
            Console.ReadKey();
        }
Exemple #2
0
        static PrmsFunc <TSourse, TResult> Memoize <TSourse, TResult>(PrmsFunc <TSourse, TResult> func)
        {
            Dictionary <string, TResult> cache = new Dictionary <string, TResult>();

            return(args =>
            {
                var key = $"{ args.ToString() }:{ string.Join("|", args) }";

                TResult result = default(TResult);

                if (cache.ContainsKey(key))
                {
                    result = cache[key];
                }
                else
                {
                    result = cache[key] = func(args);
                }
                return result;
            });
        }
Exemple #3
0
 static TResult OptimizedCalculation <TSourse, TResult>(PrmsFunc <TSourse, TResult> lambda,
                                                        IEnumerable <TSourse> lambdaParams)
 => lambda(lambdaParams.ToArray());