我正在寻找一个函数,它需要两个列表之间的交集并创建一个新列表,我有这个函数:let intersect x y = Set.intersect (Set.ofList x) (Set.ofList y)
做我想做的事情,但我不想使用 F# 中的任何内置函数
问问题
2490 次
2 回答
5
最好使用图书馆的东西,但如果你不能
如果我们假设输入列表已排序(使用List.sort
或编写您自己的):
let rec intersect a b =
match a with
|h::t -> match b with
|h2::t2 ->
if h=h2 then h::(intersect t t2)
else if h>h2 then intersect t b else intersect a t2
|[] -> []
|[] -> []
于 2012-11-26T09:02:21.087 回答
5
我同意在这种情况下将列表转换为集合并不好。
这是另一个无需转换为集合但使用内置Enumerable.Intersect函数的替代方法:
open System.Linq
let intersect (xs:'a seq) (ys: 'a seq) = xs.Intersect(ys)
您可以使用 调用此函数FSharpList
。
于 2016-04-07T14:43:04.773 回答