Haskell:根据另一个列表的内容从1个列表中删除元组

时间:2013-10-30 00:43:43

标签: haskell filtering

我有一个问题,我试图过滤(删除)一个列表中包含在另一个列表中的元素。两个列表都包含元组。我对如何做到这一点的想法如下:

map solutions.filter (\(x,y) -> (x,y) notElem) forced --Trying to remove elements from solutions that are also in forced.

如果这是一个愚蠢的问题,我很抱歉。我只是在学习haskell,并且仍在围绕列表过滤器进行思考。

编辑:我发现实际上,我试图删除强制列表中除(x,y)对之外的所有(x,*) and (*,y)

示例:强制= [(A,1)] 解= [(A,1),(A,2),(A,3),(B,1),(B,2),(B,3)] 我想要创建的是一个新列表,它删除所有的元组,其中1被分配给除A或A以外的任务而被分配给1以外的任务。 所以结果看起来像 [(A,1),(B,2),(B,3)]

1 个答案:

答案 0 :(得分:2)

Data.List有the (\\) operator

import Data.List ((\\))

a = [5, 6, 7, 8, 2, 1, 4]
b = [7, 2, 4]
a \\ b -- [5, 6, 8, 1]

对于你的元组,我想你可以这样做:

[(a, b) | (a, b) <- solutions, not $ any (\(c, d) -> (a == c && b /= d) || (a /= c && b == d)) forced]