我正在尋找一個函數,它需要兩個列表之間的交集並創建一個新列表,我有這個函數:let intersect x y = Set.intersect (Set.ofList x) (Set.ofList y)
這是我做的,但我不想使用任何內置函數F#兩個列表之間的交集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
|[] -> []
|[] -> []
是否可以使用「平行」匹配進行改進,即一次匹配a和b? – Joh
測試了這段代碼,它不起作用 – user1838768
@ user1838768:你用排序列表測試過嗎? – pad
我同意將列表轉換爲集合不是在這種情況下很好。
這裏是另一種替代方案,無需轉換工程組,而是使用內置Enumerable.Intersect功能:
open System.Linq
let intersect (xs:'a seq) (ys: 'a seq) = xs.Intersect(ys)
你可以調用這個函數與FSharpList
。
- 1. F#相交兩個列表
- 2. f#列表交集
- 3. 如何應用C++中兩個列表之間的交集?
- 4. 查找兩個候選字符串列表之間的交集
- 5. 兩個表中的行的子集之間的重疊/交集
- 6. 檢查兩個Path2D之間的交集
- 7. 刪除SQL Server中兩個表之間的交集
- 8. 獲取F#集合中兩個元素之間的元素
- 9. 計算包含範圍的兩個列表之間的交集/截距
- 10. 兩個詞典列表的交集?
- 11. 兩個大單詞列表的交集
- 12. 兩個鏈接列表的交集
- 13. 如何找到兩個git提交之間的交集?
- 14. 查找兩個集合之間的交集MongoDB中
- 15. 2個範圍集之間的交集
- 16. 獲取兩個提交之間的所有標記列表
- 17. 獲取Git中兩個標籤之間的新提交列表?
- 18. 列表git提交兩個日期之間的主分支
- 19. 兩個分支之間的非集成更改列表
- 20. 計劃之間的交集之間的交集
- 21. 鏈接兩個表之間的列
- 22. 兩個std之間的距離::列表
- 23. 發送兩個列表之間的值
- 24. C#兩個列表之間的差異
- 25. 比較兩個MYSQL表之間的列
- 26. 兩個列表之間的範圍
- 27. F中的交集#
- 28. 查找兩列之間的交點
- 29. 在兩個recyclerView列表之間交換項目
- 30. 兩個字符串之間的交集的第一部分
使用內置的東西究竟有什麼問題 - 它會比你自己寫的任何東西都好。此外,您所寫的任何內容都會複製它 –
如果您忽略列表中的排序,則可以將其視爲多重集,而不是集。你想在列表中多次出現的元素做什麼? – Joh