F# C# 类的所有排列
我有一个 C# 类 MyClass。
我需要实现返回所有的 f# 方法 IList 中项目的可能排列
问题是 MyClass 包含一个方法 bool CheckOrder(IList 前辈) 如果满足以下条件则返回 true MyClass 的实例可以放在排列中的实例之后 参数中的 MyClass。否则该方法返回 false。
请有人告诉我如何实现正确的 F# 函数。
更新: 请您概述一下方法测试的 F# 代码,考虑到我的 C# 类具有方法: bool CheckOrder(IList 前辈)
I have a C# class MyClass.
And I would need to implement f# method returning all
possible permutations of items in a IList
Problem is that MyClass contains a method
bool CheckOrder(IList predecessors) returning true if the
instance of MyClass can be placed in the permutation after instances
of MyClass in the parameter. Otherwisem this method returns false.
Please, could anyone advise me how to implement a proper F# function.
Update:
Please, could you outline F# code of the method test considering my C# class having method: bool CheckOrder(IList predecessors)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您的
CheckOrder
方法需要一个IList
,因此我们应该在 F# 中使用数组,因为数组实现了IList
接口。对于排列候选中的每个元素,我们需要检查其在数组中的所有前驱元素是否合法。对我来说,这看起来像是折叠操作的工作,其中折叠的状态参数是“到目前为止的数组”的元组和布尔成功标志。
Array.append 可能效率很低。如果这太慢,您应该考虑使用
ResizeArray
(与 C#List
相同)。Your
CheckOrder
method expects anIList<MyClass>
, so we should maybe work with arrays in F#, since arrays implement theIList
interface.For every element in a permutation candidate, we need to check whether all its predecessors in the array are legal. To me, that looks like a job for a
fold
operation where thefold
's state parameter is a tuple of the "array so far" and a boolean success flag.Array.append
is probably quite inefficient. If this is too slow, you should consider using aResizeArray
(which is the same as a C#List
) instead.