簡體   English   中英

兩個列表F#之間的交叉點

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM