1

有没有一种简单的方法可以检查两个列表是否包含共同元素。

IE

set1 = [1,2,3,4]
set2 = [[1,5,7],[1,2,3,8]]

有没有一种方法可以潜在地隔离 set1 中的元素,但 set2 中的任何集合中都没有?最好的方法是将 set2 中的 x 数量的集合加在一起,以便有一个大集合(使用 concat)与 set1 进行比较,还是浪费时间?

非常感谢任何建议。

4

3 回答 3

1
import Data.Set as Set
foldl (\x y -> Set.difference  x (Set.fromList y)) (Set.fromList set1) set2

给出以下输出:

fromList [4]

并且总是会给 set1 中不在 set2 中的任何集合中的成员 - 这似乎是你的问题。

于 2013-10-07T11:13:40.580 回答
0

尝试

filter (`notElem` (concat set2)) set1

它将返回set1不在任何列表中的所有元素的列表set2。但是,我不知道它的空间复杂性。

于 2013-10-06T18:44:20.040 回答
0

您可以创建一组所有元素set2并使用它来过滤set1

import Data.Set as Set
let s = foldl (flip Set.insert) Set.empty (join set2) in [e | e <- set1, e `notMember` s]
于 2013-10-06T18:44:47.737 回答