两个参数记忆化
In C# how do I memoize a function with two arguments?
Do I have to curry before memoization?
Wes Dyer wrote the Memoization code I typically use, but now I need two arguments
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您只需制作 Memoize 方法的重载版本,该方法具有三种泛型类型,并采用带有两个参数的函数和两个实参。 它仍然返回一个无参数函数:
编辑:
或者,您需要为包含两个参数的 KeyValuePair 创建一个自定义 IEqualityComparer,以便 Memoize 方法能够返回具有两个参数的函数:
You just make an overloaded version of the Memoize method that has three generic types and takes a function with two parameters, and the two arguments. It still returns a parameterless function:
Edit:
Alternatively, you need to make a custom IEqualityComparer for a KeyValuePair that contains the two arguments, for the Memoize method to be able to return a function with two parameters:
Wes 还有另一篇文章,他给出了 Memoize 的两个(或更多)参数版本。 它不需要自定义比较器。
Wes has another post where he gives a two (or more) argument version of Memoize. It does not require a custom comparer.
使用新版本的 .NET,您可以使用元组稍微简化已接受的解决方案的代码
With new versions of .NET you can simplify the accepted solution's code a bit by using tuples
你应该能够记住一对。 这两个 arg 函数调用您记住的单个 arg 函数。
You should be able to memoize a pair. The two arg function calls a single arg function that you memoize.
我还用 C# 做了一些记忆方面的工作。 我的结果类似,但使用从输入对象哈希码的串联派生的字典键。 该模式可以扩展到与 Func<> 一样多的输入。 会允许。
更多信息请参见:http://bit.ly/t6iNJP
I also did some work on memoization in C#. My results are similar but use a dictionary key derived from the concatenation of the input object hash codes. The pattern can be extended to as many intputs as Func<> will allow.
Se more here: http://bit.ly/t6iNJP