删除元组中的第二个元素

时间:2011-09-28 07:44:48

标签: list haskell tuples

我有一个看起来像这样的元组列表。

[ [(1,True),(2,True)] , [(3,False),(4,False),(5,False)] ]

我的目标是让[1,2,3,4,5]弄出那个烂摊子。

我尝试使用mapfilter删除所有Bool,但filter也删除了元组中的第一个元素。如果我可以删除每个元组中的Bool,那么我可以使用循环将每个元组的fst分配给一个新的空列表?

4 个答案:

答案 0 :(得分:9)

f :: [[(a, b)]] -> [a]
f = concatMap (map fst)

然后f [ [(1,True),(2,True)] , [(3,False),(4,False),(5,False)] ][1,2,3,4,5]

答案 1 :(得分:4)

或者列表推导:

f xss = [fst x | xs <- xss, x <- xs]

答案 2 :(得分:3)

试试这个(编辑,感谢 Michael Kohl pat 的评论):

fun :: [[(a,b)]] -> [a]
fun = map fst . concat

然后在GHC:

*Main> let l = [ [(1,True),(2,True)] , [(3,False),(4,False),(5,False)] ]
[[(1,True),(2,True)],[(3,False),(4,False),(5,False)]]
*Main> fun l
[1,2,3,4,5]

答案 3 :(得分:0)

foldl1 (\acc x -> acc ++ x)  [a | b <- lst, let a =  map fst b]