我有一个C#类MyClass。
我需要实现f#方法返回all IList中项目的可能排列
问题是MyClass包含一个方法 bool CheckOrder(IList前辈)返回true如果 MyClass的实例可以放在实例后的排列中 参数中的MyClass。否则此方法返回false。
拜托,有没有人可以告诉我如何实现正确的F#功能。
更新的 请问,考虑到我的C#类有方法,你能概述方法测试的F#代码:bool CheckOrder(IList前身)
答案 0 :(得分:0)
您的CheckOrder
方法需要IList<MyClass>
,因此我们应该使用F#中的数组,因为数组实现了IList
接口。
对于置换候选中的每个元素,我们需要检查数组中的所有前导是否合法。对我来说,这似乎是fold
操作的工作,其中fold
的状态参数是“到目前为止的数组”的元组和布尔成功标志。
let checkPermutation (permutation:MyClass[]) =
let prefix, success =
permutation
|> Array.fold (fun (prefix:MyClass[], success) element ->
if not success then
(Array.empty, false) // once failed, the result is false
else
(Array.append [|element|] prefix, element.CheckOrder prefix)
)
(Array.empty, true)
success
Array.append
可能效率很低。如果这太慢,您应该考虑使用ResizeArray
(与C#List
相同)。