basic haskell:比较一组Ints和一组int

时间:2013-10-06 18:24:57

标签: haskell

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

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

有没有办法可以隔离set1中的元素但不能隔离set2中的任何集合? 最好的方法是将set2中的x数量的集合添加到一起以使用一个大集合(使用concat)来与set1进行比较,或者这是浪费时间吗?

非常感谢任何建议。

3 个答案:

答案 0 :(得分:1)

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

提供以下输出:

fromList [4]

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

答案 1 :(得分:0)

尝试

filter (`notElem` (concat set2)) set1

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

答案 2 :(得分: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]