两个列表F#之间的交叉点

use*_*768 5 f# list

我正在寻找一个函数,它接受两个列表之间的交集并创建一个新列表,我有这个函数:let intersect x y = Set.intersect (Set.ofList x) (Set.ofList y)我做什么我蚂蚁但我不想使用F#中的任何内置函数

Joh*_*mer 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
             |[] -> []
    |[] -> []
Run Code Online (Sandbox Code Playgroud)


lei*_*ann 5

我同意在这种情况下将列表转换为集合并不好。

这是另一种替代方法,无需转换为集合,但使用内置的Enumerable.Intersect函数:

open System.Linq

let intersect (xs:'a seq) (ys: 'a seq) = xs.Intersect(ys)
Run Code Online (Sandbox Code Playgroud)

您可以使用 来调用该函数FSharpList