当前位置:  开发笔记 > 编程语言 > 正文

两个参数Memoization

如何解决《两个参数Memoization》经验,为你挑选了2个好方法。

在C#中,如何用两个参数记忆函数?

在记忆之前我必须要咖喱吗?

Wes Dyer编写了我通常使用的Memoization代码,但现在我需要两个参数



1> Guffa..:

您只需创建具有三种泛型类型的Memoize方法的重载版本,并使用具有两个参数的函数和两个参数.它仍然返回无参数函数:

public static Func Memoize(this Func f, A1 a1, A2 a2)
{
  R value = default(R);
  bool hasValue = false;
  return () =>
    {
      if (!hasValue)
      {
        hasValue = true;
        value = f(a1,a2);
      }
      return value;
    };
}

编辑:
或者,您需要为包含两个参数的KeyValuePair创建自定义IEqualityComparer,以便Memoize方法能够返回具有两个参数的函数:

public static Func Memoize(this Func f, IEqualityComparer> comparer)
{
   var map = new Dictionary,R>(comparer);
   return (a1,a2) =>
      {
         R value;
         KeyValuePair key = new KeyValuePair(a1,a2);
         if (map.TryGetValue(key, out value)) {
            return value;
         }
         value = f(a1,a2);
         map.Add(key, value);
         return value;
      };
}



2> Craig Stuntz..:

Wes有另一个帖子,他给出了Memoize的两个(或更多)参数版本.它不需要自定义比较器.

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有