我有两个元组列表,格式均为 [(a,b),..]。
我希望比较它们并获得共同的元素——但是尝试使用intersect却不起作用。是否有一种使用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)]
filter (\
elem` list2) list1` :) - Rizier123intersect
比较了元组的所有元素,但我认为题目发起者想要基于仅比较元组的第一个元素来找到所有交集。 - Arthur WelfData.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)]
intersectBy ((==) \
on` fst)和
select (min `on` snd)`吗? - kureta