繁体   English   中英

元组列表的交集-Haskell

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM