[英]Intersection of lists of tuples - Haskell
我有两个元组列表,都以[(a,b),..]的形式出现。
我希望将它们进行比较并获得共同的元素-但已尝试使用相交,但这不起作用。 有没有一种方法使用地图/过滤器将相交输出为新的元组列表?
尝试使用列表理解:
[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)]
您可以使用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)]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.