筛选元组列表并仅返回fst
和snd
值相同的元素的最佳方法是什么?
[(2,1),(2,2),(3,1),(10,9),(10,10)]
会返回(2,2)
和(10,10)
。
答案 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]