我有兩種形式爲[(a,b),..]的元組列表。元組列表的交集-Haskell
我想比較它們並獲得常用元素 - 但嘗試使用相交,但這不起作用。有沒有一種使用map/filter將交集作爲新的元組列表輸出的方法?
我有兩種形式爲[(a,b),..]的元組列表。元組列表的交集-Haskell
我想比較它們並獲得常用元素 - 但嘗試使用相交,但這不起作用。有沒有一種使用map/filter將交集作爲新的元組列表輸出的方法?
嘗試用一個列表理解:
[x | x <- list1, x `elem` list2]
例子:
Prelude> let list1 = [(1,2), (2,3), (3,4)]
Prelude> let list2 = [(1,2), (2,3), (3,5)]
Prelude> [x | x <- list1, x `elem` list2]
[(1,2),(2,3)]
反正intersect
應該工作,它爲我工作:
Prelude> import Data.List
Prelude Data.List> list1 `intersect` list2
[(1,2),(2,3)]
過濾器也將工作:'過濾器(\'ELEM \'列表2)list1' :) – Rizier123
在你的答案'intersect'的所有元素進行比較元組,但我認爲主題首發想根據比較元組的第一個元素來找到所有的交集。 –
可以使用Data.Function.on
功能您需要給元組的第一個(或第二個)元素提供函數:
import Data.Function (on)
import Data.List (intersectBy)
intersectBy ((==) `on` fst) [(1,2), (2,3), (3,4)] [(1,2), (2,3), (3,5)]
> [(1,2),(2,3),(3,4)]
我想這會從左邊的列表中返回匹配的元組。我們可以告訴像''fst)''和'select(min \'on \'snd)''intersectBy((==)\'')嗎? – kureta
請出示你的代碼,'intersect'應該可以正常爲你 – Rizier123