[英]Intersection between two lists F#
我正在尋找一個函數,它接受兩個列表之間的交集,並創建一個新的列表,我有這個函數: let intersect xy = Set.intersect (Set.ofList x) (Set.ofList y)
做我螞蟻但我不想在F#中使用任何內置函數
最好使用庫中的東西,但如果你不能
如果我們假設輸入列表已排序(使用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
|[] -> []
|[] -> []
我同意在這種情況下將列表轉換為集合並不好。
這是另一種替代方法,無需轉換為集合即可使用內置的Enumerable.Intersect函數:
open System.Linq
let intersect (xs:'a seq) (ys: 'a seq) = xs.Intersect(ys)
您可以使用FSharpList
調用此函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.