如何在元组列表中查找重复项?

时间:2014-12-18 21:09:53

标签: haskell tuples

筛选元组列表并仅返回fstsnd值相同的元素的最佳方法是什么?

[(2,1),(2,2),(3,1),(10,9),(10,10)] 

会返回(2,2)(10,10)

2 个答案:

答案 0 :(得分:12)

最简单的方法是将filter与lambda filter (\ (a, b) -> a == b) ls一起使用。

你也可以很可爱并使用uncurry,它将两个参数的正常函数更改为一个带有元组的函数,给你filter (uncurry (==))。请注意,(==)只是Eq a => a -> a -> Bool类型的函数,因此uncurry (==)Eq a => (a, a) -> Bool类型的函数,这正是您正在寻找的。

答案 1 :(得分:4)

您可以使用列表推导来完成:

doubles ls = [(x,y) | (x,y) <- ls, x==y]