如何分开两套?

时间:2013-01-08 16:22:57

标签: clojure

我有两套需要创建第三套,其中包括第一套中没有的元素:

(? #{"a" "b" "c"} #{"b"}) ; -> ["a" "c"]

我知道disj,但它仅在第二个参数是元素而不是集合时才有效。

2 个答案:

答案 0 :(得分:7)

如果您有两套,则可以使用set difference

user=> (require 'clojure.set)
user=> (difference #{"a" "b" "c"} #{"b"})
#{"a" "c"}

答案 1 :(得分:2)

如果没有差异功能,您可以使用reduce:

轻松创建它
=> (reduce disj #{"a" "b" "c" "d"} #{"b" "d"})
#{"a" "c"}

Reduce采用一个函数,一个初始的'累加器'和一个映射的集合来修改累加器。在这种情况下,它会使用第一个集合作为累加器,从第二个集合中删除第一个项目,然后从下一个集合中删除等等。